我有一个winforms usercontrol,在WPF控件中有多个按钮。
我的usercontrol以前托管在Windows窗体中,我能够这样做
this.ParentForm.AcceptButton = this.btnSearch;
我正在尝试建立如何在usercontrol上执行类似操作,因为它在WindowsFormHost中。 ParentForm属性为null。
理想情况下,我有两件事要做。
非常感谢, 克里斯
答案 0 :(得分:19)
在页面上的按钮上设置Button.IsCancel(Esc)或IsDefault(Enter)。
示例:
<Button Content="Yes" Click="Yes_Button_Click" IsDefault="True"/>
<Button Content="No" Click="No_Button_Click" IsCancel="True"/>
答案 1 :(得分:1)
将默认按钮的IsDefault属性设置为true。
答案 2 :(得分:0)
WPF Window
没有AcceptButton
的Windows窗体概念。您可能无法获得 Enter 键以自动吸引您的btnSearch.Click
处理程序。此外,您也无法获得接受按钮的替代样式。
您可能会在Windows窗体控件上公开一个方法,就像您单击搜索按钮一样,并在按下 Enter 键时从WPF端调用该方法。否则,您会发现缺少Forms控件和WPF控件之间的交互(WindowsFormsHost
从未打算提供完全保真的访问权限。)
答案 3 :(得分:0)
对于使用Esc和Enter,我使用了以下方法:
<UserControl.InputBindings>
<KeyBinding Key="Esc" Command="{Binding CancelCommand}"/>
<KeyBinding Key="Enter" Command="{Binding SaveCommand}"/>
</UserControl.InputBindings>
答案 4 :(得分:-1)
我不确定,但您可以将焦点设置为该按钮吗?所以它会有与winforms相同的行为。
答案 5 :(得分:-1)
很遗憾WPF中没有AcceptButton - 而且很烦人。
我通过处理Form的KeyUp事件成功实现了该功能。 这是代码:
private void Window_KeyUp(object sender, KeyEventArgs e)
{
if(e.Key == Key.Enter)
{
TargetButton_Click(sender, null);
}
}
似乎工作正常。在我的情况下,我在WPF表单上有文本框,用户输入值和命中,似乎工作正常。 某些控件可能存在问题,在表单之前会覆盖(抓取KeyUp事件),因此您的里程可能会有所不同。 :)