2009-11-25 30 views
9

Tôi có WPF ComboBox bên trong một mẫu dữ liệu (rất nhiều combobox trong listbox) và tôi muốn xử lý nút enter. Nó sẽ dễ dàng nếu nó được ví dụ một nút - Tôi sẽ sử dụng Command + Relative ràng buộc đường dẫn vv Thật không may, tôi không có ý tưởng làm thế nào xử lý nhấn phím với một lệnh hoặc làm thế nào để thiết lập xử lý sự kiện từ mẫu. Bất kỳ đề xuất nào?Xử lý sự kiện trong DataTemplate

Trả lời

4

Tôi đã giải quyết được sự cố của mình bằng cách sử dụng trình xử lý sự kiện thông thường nơi tôi đi qua cây trực quan, tìm nút tương ứng và gọi đó là lệnh. Nếu bất kỳ ai khác có cùng một vấn đề, vui lòng đăng nhận xét và tôi sẽ cung cấp thêm chi tiết về việc thực hiện.

UPD

Đây là giải pháp của tôi:

Tôi tìm kiếm trên cây trực quan cho một nút và hơn lệnh liên quan đến nút thực thi.

View.xaml:

<ComboBox KeyDown="ComboBox_KeyDown"/> 
<Button Command="{Binding AddResourceCommand}"/> 

View.xaml.cs:

private void ComboBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     var parent = VisualTreeHelper.GetParent((DependencyObject)sender); 
     int childrenCount = VisualTreeHelper.GetChildrenCount(parent); 

     for (int i = 0; i < childrenCount; i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i) as Button; 
      if (null != child) 
      { 
       child.Command.Execute(null); 
      } 
     } 
    } 
} 
10

Bạn có thể sử dụng EventSetter theo phong cách bạn đang thiết lập các mẫu với:

<Style TargetType="{x:Type ListBoxItem}"> 
     <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" /> 
     <Setter Property="Template" ... /> 
</Style> 
Các vấn đề liên quan