2011-01-24 29 views
5

Tôi có nhiều nút thay vì làmTrong WPF tôi có thể đính kèm cùng một trình xử lý nhấn vào nhiều nút cùng một lúc như tôi có thể trong Javascript/Jquery không?

this.button1.Click += new System.EventHandler(this.button_Click); 
this.button2.Click += new System.EventHandler(this.button_Click); 
etc. 
this.button10.Click += new System.EventHandler(this.button_Click); 

Tôi muốn để có thể làm điều gì đó như thế này trong pseudo-code:

this.button*.Click += new System.EventHandler(this.button_Click); 

Trong javascript nó có thể là có một cái gì đó như thế trong WPF?

Trả lời

10

Trong WPF, Button.Clickrouted event, có nghĩa là sự kiện được định tuyến cây hình ảnh cho đến khi được xử lý. Điều đó có nghĩa là bạn có thể thêm trình xử lý sự kiện vào XAML của mình, như sau:

<StackPanel Button.Click="button_Click"> 
    <Button>Button 1</Button> 
    <Button>Button 2</Button> 
    <Button>Button 3</Button> 
    <Button>Button 4</Button> 
</StackPanel> 

Bây giờ tất cả các nút sẽ dùng chung một trình xử lý (button_Click) cho sự kiện Nhấp chuột của họ.

Đó là cách dễ dàng để xử lý cùng một sự kiện trên một nhóm các điều khiển nằm trong cùng một vùng chứa chính. Nếu bạn muốn làm điều tương tự từ mã, bạn có thể sử dụng phương pháp AddHandler, như sau:

AddHandler(Button.ClickEvent, new RoutedEventHandler(button_Click)); 

Điều đó sẽ thêm trình xử lý cho mỗi lần nhấp nút trong cửa sổ. Bạn có thể muốn đặt tên cho StackPanel của mình (như "stackPanel1") và chỉ làm như vậy cho vùng chứa đó:

stackPanel1.AddHandler(Button.ClickEvent, new RoutedEventHandler(button_Click)); 
+0

Cảm ơn tôi đã không yêu cầu làm điều này lập trình nhưng bạn đọc trong tâm trí của tôi :) – user310291

3

Thay vì làm button1, button2 vv, hãy tạo Danh sách các nút.

Sau đó, bạn có thể viết:

myList.ForEach(b => b.Click += button_Click); 

Từ XAML bạn có thể đính kèm các handler nhấp chuột để phụ huynh của các nút một cái gì đó như thế này (tôi sử dụng một StackPanel là một ví dụ):

<StackPanel Button.Click="button_Click"> 
    <Button .... >First button</Button> 
    <Button .... >Second button</Button> 
    <Button .... >Third button</Button> 
</StackPanel> 

Điều này hoạt động bởi vì các nút Nhấn sự kiện là sự kiện bọt được định tuyến.

+0

Giải thích tốt cảm ơn bạn rất nhiều ForEach tôi không quen nhưng sẽ học nó. – user310291

1

Bạn có thể sử dụng Linq To VisualTree để xác định tất cả các nút trong Window/UserControl của bạn, sau đó lặp lại danh sách này thêm trình xử lý sự kiện của bạn.

var buttons = this.Descendants<Button>().Cast<Button>(); 
foreach(var button in buttons) 
{ 
    button.Click += button_Click; 
} 

Tôi nghĩ điều đó ngắn gọn như bạn sắp đạt được!

+0

Rất thú vị cho dự án phức tạp tại thời điểm này tôi chỉ cần cơ bản. – user310291

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