Передача событий от дочернего элемента управления UserControl - самый прямой путь? - PullRequest
2 голосов
/ 22 декабря 2010

Мой UserControl содержит кнопку. Я хочу, чтобы событие Click кнопки было «пропущено» напрямую пользователям UserControl. Они увидят это как событие с именем ButtonClick.

public event RoutedEventHandler ButtonClick  
{  
    add { _button.Click += value; }  
    remove { _button.Click -= value; }  
}  

Этот подход не работает. Я добавил обработчик для ButtonClick в коде клиента, но нажатие кнопки не вызывает его там.

Возможно, мне не хватает чего-то простого, потому что я все еще новичок в WPF.

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Вы должны зарегистрировать RoutedEvent:

public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent(
    "ButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyUserControl));

.. и затем использовать свойство для управления вновь зарегистрированным обработчиком событий

public event RoutedEventHandler ButtonClick
    {
        add { AddHandler(ButtonClickEvent , value); } 
        remove { RemoveHandler(ButtonClickEvent , value); }
    }

Тогда, очевидно, вам нужно вызвать Routed Event, когда срабатывает событие нажатия кнопки:

void button_Click(object sender, EventArgs e)
{
   RaiseEvent(new RoutedEventArgs(ButtonClickEvent));
}

Это всего лишь пара шагов от простого подключения непосредственно к обработчику событий кнопки, но не страшно.

0 голосов
/ 22 декабря 2010

Событие Button Click является перенаправленным событием, которое означает, что оно перемещается вверх и вниз по визуальному дереву вашего приложения, это означает, что любой родитель вашей кнопки может обработать это событие.Поэтому вам не нужно добавлять свою собственную логику для поддержки этого, т. Е. Ваш код избыточен!

Ниже описано, как зарегистрировать обработчик для этого перенаправленного события:

http://msdn.microsoft.com/en-us/library/ms742806.aspx#event_handing

Колин Э.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...