从WPF WindowsFormsHost设置“接受按钮”

时间:2011-03-25 11:59:39

标签: c# wpf winforms winforms-interop

我有一个winforms usercontrol,在WPF控件中有多个按钮。

我的usercontrol以前托管在Windows窗体中,我能够这样做

this.ParentForm.AcceptButton = this.btnSearch;

我正在尝试建立如何在usercontrol上执行类似操作,因为它在WindowsFormHost中。 ParentForm属性为null。

理想情况下,我有两件事要做。

  1. AcceptButton行为(按键输入键触发按钮)
  2. AcceptButton格式 - 即winforms按钮具有应用接受按钮的备用格式。
  3. 非常感谢, 克里斯

6 个答案:

答案 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事件),因此您的里程可能会有所不同。 :)