Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Область видимости в методах компонента 
V
    Опции темы
bernex
Дата 19.2.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



Есть компонент, который содержит кнопку.
По нажатию на нее вызывается событие:

Код

this.Button.LongClick += new my.ButtonControl.LongClickEventHandler(.object sender, my.ButtonControl.LongClickRoutedEventArgs e..);


Но в этом событии:

Код

void Button_LongClick(object sender, ClickRoutedEventArgs e)
        {
           
                this.Button.Visibility = Visibility.Hidden;
            }
        }


Не срабытывает сокрытие этой кнопки!!

Метод находится в компоненте!

Подскажите как исправить? 
Спасибо!

Это сообщение отредактировал(а) bernex - 19.2.2009, 01:55
PM   Вверх
Partizan
Дата 19.2.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



bernex, а вы уверены, что событие таки генерируется и обработчик вызывается?

Я просто почему спрашиваю....уж очень странно вы на событие обработчик вешаете....

Добавлено через 35 секунд
вернее "обработчик" уж очень "странный" smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bernex
Дата 19.2.2009, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



там так :
Код

this.Button.LongClick += new my.ButtonControl.LongClickEventHandler(Button_LongClick);


Код

void Button_LongClick(object sender, my.ButtonControl.LongClickRoutedEventArgs e)
        {
            if (e.isLast)
            {
                
                this.Button.Visibility = Visibility.Hidden;
                
            }
        }


Добавлено @ 01:53
Извиняюсь за сокращение кода ((

Добавлено через 5 минут и 19 секунд
Весь компонент кнопки моей:

Код

namespace my
{
    public partial class ButtonControl
    {
        Timer timer;
        private double _speedInterval = 10;

        public double SpeedInterval
        {
            get
            {
                return this._speedInterval;
            }
            set
            {
                this._speedInterval = value;
            }
        }
        private object _ButtonLabel;
        public object ButtonLabel
        {
            get {
                Label i = this.Butt.Template.FindName("label", this.Butt) as Label;
                if (i != null && i.Content != null)
                    return i.Content;
                return this._ButtonLabel; 
            }
            set {
                Label i = this.Butt.Template.FindName("label", this.Butt) as Label;
                if (i != null)
                    i.Content = value;
                this._ButtonLabel = value; 
            }
        }
        public static readonly RoutedEvent LongClickEvent = EventManager.RegisterRoutedEvent(
            "LongClick", RoutingStrategy.Bubble, typeof(LongClickEventHandler), typeof(ButtonControl));

        public class LongClickRoutedEventArgs : RoutedEventArgs
        {
            private TimeSpan _dur;
            private bool _last;
            public LongClickRoutedEventArgs(RoutedEvent routedEvent,
                object source, TimeSpan dur, bool last)
                : base(routedEvent, source)
            {
                _dur = dur;
                _last = last;
            }

            public TimeSpan ClickDuration
            {
                get { return _dur; }
            }

            public bool isLast
            {
                get { return _last; }
            }
        }

        public event LongClickEventHandler LongClick
        {
            add { AddHandler(LongClickEvent, value); }
            remove { RemoveHandler(LongClickEvent, value); }
        }
        public delegate void LongClickEventHandler(object sender, LongClickRoutedEventArgs e); 
        public ButtonControl()
        {
            this.InitializeComponent();
            this.Butt.DataContext = this;

            this.PreviewMouseDown += new MouseButtonEventHandler(ButtonControl_PreviewMouseDown);
            this.PreviewMouseUp += new MouseButtonEventHandler(ButtonControl_PreviewMouseUp);
            //this.LongClick += new LongClickEventHandler(ButtonControl_LongClick);
        }

        void ButtonControl_LongClick(object sender, LongClickRoutedEventArgs e)
        {
            ///if(e.Dur.TotalSeconds>2) s.stopLongClick();
        }

        void ButtonControl_PreviewMouseUp(object sender, MouseButtonEventArgs e)
        {
            TimeSpan duration = DateTime.Now - downDate;            
            
            ButtonControl bc = (ButtonControl)sender;
            bc.stopLongClick();

            try {
                RaiseEvent(new LongClickRoutedEventArgs(ButtonControl.LongClickEvent, this, duration, true));
            }
            catch { }
        }
        DateTime downDate;
        void ButtonControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            timer = new Timer();
            downDate = DateTime.Now;
            timer.Interval = this._speedInterval;
            timer.Start();
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        }
        void stopLongClick()
        {
            timer.Stop();
            timer.Close();
        }
        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            TimeSpan duration = DateTime.Now - downDate;
            if (duration.TotalMilliseconds < 200)
            {
                //return;
            }
            Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
            new Action(
              delegate()
              {
                  try
                  {
                      RaiseEvent(new LongClickRoutedEventArgs(ButtonControl.LongClickEvent, sender, duration, false));
                  }
                  catch { }
              }
            )
            );
        }
    }
}


Это сообщение отредактировал(а) bernex - 19.2.2009, 01:55
PM   Вверх
bernex
Дата 19.2.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



Хамл:

Код

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="my.ButtonControl"
    d:DesignWidth="89" d:DesignHeight="51">
    <UserControl.Resources>
        <ControlTemplate x:Key="ButtonControlTemplate" TargetType="{x:Type Button}">
            <ControlTemplate.Resources>
                <Storyboard x:Key="Storyboard1">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                        <SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="1.1"/>
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                        <SplineDoubleKeyFrame KeyTime="00:00:00.4000000" Value="1.1"/>
                    </DoubleAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="image" Storyboard.TargetProperty="(FrameworkElement.VerticalAlignment)">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static VerticalAlignment.Stretch}"/>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
                <Storyboard x:Key="Storyboard2">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
                <Storyboard x:Key="OnLoaded1">
                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.Opacity)">
                        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="1"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </ControlTemplate.Resources>
            <Grid x:Name="grid" RenderTransformOrigin="0.5,0.5" Width="89" Height="51">
                <Grid.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                        <SkewTransform AngleX="0" AngleY="0"/>
                        <RotateTransform Angle="0"/>
                        <TranslateTransform X="0" Y="0"/>
                    </TransformGroup>
                </Grid.RenderTransform>
                <!--Image x:Name="ImageBack" Margin="0,0,0,0"/-->
                <Grid x:Name="GridBack" d:LayoutOverrides="GridBox" HorizontalAlignment="Stretch">
                    <Image VerticalAlignment="Bottom" x:Name="image" Source="..\content\buttonBg.png"/>
                </Grid>
                <Image x:Name="icoImage"  Source="{Binding Path=ButtonIcoSource}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Stretch="None"/>
                <Label x:Name="label" Content="{Binding Path=ButtonLabel}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20" Foreground="#FFFFFFFF"/>
            </Grid>
            <ControlTemplate.Triggers>
                <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                    <BeginStoryboard Storyboard="{StaticResource OnLoaded1}" x:Name="OnLoaded1_BeginStoryboard"/>
                </EventTrigger>
                <Trigger Property="IsPressed" Value="True">
                    <Trigger.ExitActions>
                        <BeginStoryboard x:Name="Storyboard2_BeginStoryboard" Storyboard="{StaticResource Storyboard2}"/>
                    </Trigger.ExitActions>
                    <Trigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
                    </Trigger.EnterActions>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Opacity" TargetName="GridBack" Value="0.1" />
                    <Setter Property="Opacity" TargetName="icoImage" Value="0.35" />
                    <Setter Property="Opacity" TargetName="label" Value="0.35" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot">
        <Button x:Name="Butt" Template="{DynamicResource ButtonControlTemplate}">
        </Button>
    </Grid>
</UserControl>

PM   Вверх
bernex
Дата 19.2.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 19.9.2007

Репутация: нет
Всего: нет



Решилось, спасибо  
Partizan, 

Код

public partial class ButtonControl : UserControl

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.