2012-06-26 3 views
7

У меня есть пользовательский элемент управления с несколькими кнопками, которым необходимо выполнять разные действия в зависимости от класса, использующего его.Управление событиями пользовательского управления WPF

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

Как вы это сделаете?

ответ

16

Другой способ сделать это, чтобы выставить события через события в вашем UserControl:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 


    public event RoutedEventHandler Button1Click; 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     if (Button1Click != null) Button1Click(sender, e);  
    } 
} 

Это дает свой UserControl Button1Click событий, которые перехватывают до этой кнопки в пределах вашего контроля.

+0

Благодарим вас обоих, это похоже на приятные решения. Есть ли еще альтернативы? –

4

Я бы создал команду для каждой кнопки и делегировать для каждого «обработчика». Чем вы можете предоставить делегатам пользователя (окончательное приложение) и внутренне вызвать их по методу Execute() по командам. Что-то вроде этого:

public class MyControl : UserControl { 
     public ICommand FirstButtonCommand { 
      get; 
      set; 
     } 
     public ICommand SecondButtonCommand { 
      get; 
      set; 
     } 
     public Action OnExecuteFirst { 
      get; 
      set; 
     } 
     public Action OnExecuteSecond { 
      get; 
      set; 
     } 

     public MyControl() { 
      FirstButtonCommand = new MyCommand(OnExecuteFirst); 
      FirstButtonCommand = new MyCommand(OnExecuteSecond); 
     } 
    } 

Курс «MyCommand» должен реализовать ICommand. Вам также необходимо привязать свои команды к соответствующим кнопкам. Надеюсь это поможет.

Смежные вопросы