我有一个数据模板内的WPF组合框(在列表框组合框很多),我想处理回车按钮。如果是例如,那就容易了。一个按钮-我会使用命令+相对绑定路径等。不幸的是,我不知道如何处理按键与命令或如何设置事件处理程序从模板。有什么建议吗?
a9wyjsp71#
我已经解决了我的问题,通过使用一个常见的事件处理程序,我遍历可视化树,找到相应的按钮,并调用它的命令。如果其他人也有同样的问题,请发表评论,我会提供更多的实现细节。
UPD
以下是我的解决方案:我在可视化树中搜索按钮,然后执行与按钮相关联的命令。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); } } } }
nsc4cvqm2#
本文提供了将任何Event路由到Command的方法http://nerobrain.blogspot.nl/2012/01/wpf-events-to-command.html
Event
Command
wvyml7n53#
另一个简单的选项是像这样派生控件
public class MyTextbox : TextBox { private void OnKeyDown(object sender, KeyEventArgs e) { e.Handled = true; //... return; } private void OnGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { //E.g. delete the content when focused e.Handled = true; this.Text = null; return; } public override void OnApplyTemplate() { base.OnApplyTemplate(); this.GotKeyboardFocus += OnGotKeyboardFocus; this.KeyDown += OnKeyDown; } }
如果你只是想让控件始终像这样的行为,而不是在OnApplyTemplate()中添加事件,你当然可以直接覆盖虚方法。
protected override void OnGotKeyboardFocus(System.Windows.Input.KeyboardFocusChangedEventArgs e) { e.Handled = true; this.Text = null; return; }
jq6vz3qz4#
您可以在设置模板的样式中使用EventSetter:
<Style TargetType="{x:Type ListBoxItem}"> <EventSetter Event="MouseWheel" Handler="GroupListBox_MouseWheel" /> <Setter Property="Template" ... /> </Style>
4条答案
按热度按时间a9wyjsp71#
我已经解决了我的问题,通过使用一个常见的事件处理程序,我遍历可视化树,找到相应的按钮,并调用它的命令。如果其他人也有同样的问题,请发表评论,我会提供更多的实现细节。
UPD
以下是我的解决方案:
我在可视化树中搜索按钮,然后执行与按钮相关联的命令。
View.xaml:
View.xaml.cs:
nsc4cvqm2#
本文提供了将任何
Event
路由到Command
的方法http://nerobrain.blogspot.nl/2012/01/wpf-events-to-command.html
wvyml7n53#
另一个简单的选项是像这样派生控件
如果你只是想让控件始终像这样的行为,而不是在OnApplyTemplate()中添加事件,你当然可以直接覆盖虚方法。
jq6vz3qz4#
您可以在设置模板的样式中使用EventSetter: