Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Не срабатывает "моё" маршрутизируемое событие


Автор: V0fka 31.10.2013, 15:07
Привет!

Сделал свой контрол NumberPicker, унаследованный от UserControl. Состоит он из TextBox-а и пары кнопок. В текстбоксе находится цифра, кнопки делают этой цифре +1 и -1. Помещаю этот свой контрол в основное окно - отображается, кнопки жмутся, +/-1 отрабатывает. Все нормально. Хочу теперь сделать в NumberPicker событие, на которое можно было бы подписаться в основном окне программы. Событие возникает при нажатии на кнопки. На данном этапе оно не срабатывает вообще.

Делаю следующее. В контроле пишу:

Код

public static readonly RoutedEvent ClickButtonPlusMinusEvent;
        
        static NumberPicker()
        {
            ClickButtonPlusMinusEvent = EventManager.RegisterRoutedEvent(
                                                            "ClickButtonPlusMinus",
                                                            RoutingStrategy.Bubble,
                                                            typeof(RoutedEventHandler),
                                                            typeof(NumberPicker)
                                                            );
        }

        public event RoutedEventHandler ClickButtonPlusMinus
        {
            add
            {
                AddHandler(ClickButtonPlusMinusEvent, value);
            }
            remove
            {
                RemoveHandler(ClickButtonPlusMinusEvent, value);
            }
        }



Далее в обработчиках кнопок пишу:

Код

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            int num = Int32.Parse(NumTextBox.Text);
            num--;
            NumTextBox.Text = num.ToString();
            RoutedEventArgs е = new RoutedEventArgs(ClickButtonPlusMinusEvent, this);
            RaiseEvent(e);
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            int num = Int32.Parse(NumTextBox.Text);
            num++;
            NumTextBox.Text = num.ToString();
            RoutedEventArgs е = new RoutedEventArgs(ClickButtonPlusMinusEvent, this);
            RaiseEvent(e);
   
        }


В основном окне программы в xaml пишу:

Код

<local:NumberPicker x:Name="Number" ClickButtonPlusMinus="Number_ClickButtonPlusMinus"/>


, в файле кода пишу:

Код

private void Number_ClickButtonPlusMinus(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("qqq");
        }


Но метод Number_ClickButtonPlusMinus не вызывается никогда.

Подскажите, пожалуйста, как сделать, чтоб оно заработало? smile 

Автор: V0fka 31.10.2013, 16:01
Переобозвал е в Button_Click и Button_Click1 и заработало smile .

Чтоб не описывать то, что я писал в первом посте заново, я тут же задам новый вопрос, связанный с этим контролом. В обработчике моего события имеются 2 параметра: object sender, RoutedEventArgs e. А если я хочу туда передать какое-то новое значение, например, +1 или -1, как это делается вообще?  

Автор: Luuzuk 6.11.2013, 22:55
Как вариант - создать свой класс, наследуемый от RoutedEventArgs, и описать в нем дополнительное свойство

Код

public class MyArgs : RoutedEventArgs
        {
            public MyArgs(RoutedEvent routedEvent, object source, Int32 value)
                : base(routedEvent,source)
            {
                Value = value;
            }


            public Int32 Value { get; private set; }
        }

Автор: V0fka 7.11.2013, 11:13
Luuzuk, получилось, спасибо большое! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)