2012-06-26 47 views
7

Tôi có một điều khiển người dùng với một số nút, cần thực hiện các hành động khác nhau tùy thuộc vào lớp sử dụng nó.Xử lý sự kiện của WPF User Control

Vấn đề là tôi không biết cách triển khai các trình xử lý đó vì khi sử dụng điều khiển người dùng từ ứng dụng cuối cùng, tôi không có quyền truy cập trực tiếp vào các nút để chỉ định trình xử lý nào xử lý sự kiện nào.

Bạn sẽ làm như thế nào?

Trả lời

16

Một cách khác để làm điều này là để vạch trần những sự kiện thông qua các sự kiện trong UserControl của bạn:

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);  
    } 
} 

này cho usercontrol của bạn một sự kiện Button1Click mà móc lên đến nút đó trong vòng kiểm soát của bạn.

+0

Cảm ơn cả hai, những thứ đó có vẻ là giải pháp tốt đẹp. Có lựa chọn thay thế nào khác không? –

4

Tôi sẽ tạo lệnh cho mỗi nút và ủy quyền cho từng "trình xử lý". Hơn bạn có thể trưng ra các đại biểu cho người dùng (ứng dụng cuối cùng) và gọi nội bộ chúng theo phương thức Execute() trên các lệnh. Một cái gì đó như thế này:

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); 
     } 
    } 

Của cource, "MyCommand" cần triển khai ICommand. Bạn cũng cần phải liên kết các lệnh của bạn với các nút coresponding. Hi vọng điêu nay co ich.

Các vấn đề liên quan