11

我在 WPF 控件中有一个带有多个按钮的 winforms 用户控件。

我的用户控件以前托管在 Windows 窗体中,我能够这样做

this.ParentForm.AcceptButton = this.btnSearch;

我正在尝试确定如何在用户控件上执行类似操作,因为它位于 WindowsFormHost 中。ParentForm 属性为空。

理想情况下,我希望实现两件事。

  1. AcceptButton 行为(Enter 键触发按钮按下)
  2. AcceptButton 格式 - 即 winforms 按钮应用了接受按钮的替代格式。

非常感谢,克里斯

4

6 回答 6

30

在页面中的按钮上设置 Button.IsCancel (Esc) 或 IsDefault (Enter)。

例子:

<Button Content="Yes" Click="Yes_Button_Click" IsDefault="True"/>
<Button Content="No" Click="No_Button_Click" IsCancel="True"/>
于 2012-10-08T13:40:06.127 回答
3

将默认按钮的IsDefault属性设置为 true。

于 2017-04-08T07:11:49.643 回答
0

WPFWindow没有AcceptButton. 您可能无法获得Enter自动参与您的btnSearch.Click处理程序的密钥。此外,您也无法获得接受按钮的替代样式。

您可能会在 Windows 窗体控件上公开一个方法,该方法就像您单击了搜索按钮一样,并在Enter按下该键时从 WPF 端调用该方法。否则,您会发现缺少 Forms 控件和 WPF 控件之间的交互(WindowsFormsHost从未打算提供完全保真访问)。

于 2011-03-25T14:03:26.020 回答
0

为了使用 Esc 和 Enter,我使用了这个:

<UserControl.InputBindings>
    <KeyBinding Key="Esc" Command="{Binding CancelCommand}"/>
    <KeyBinding Key="Enter" Command="{Binding SaveCommand}"/>
</UserControl.InputBindings>
于 2019-02-22T12:04:25.533 回答
-1

我不确定,但你能把焦点设置在那个按钮上吗?因此它的行为与 winforms 中的行为相同。

于 2011-03-25T12:57:08.433 回答
-1

不幸的是,WPF 中没有 AcceptButton——而且很烦人。

我通过处理表单的 KeyUp 事件成功地实现了该功能。这是代码:

private void Window_KeyUp(object sender, KeyEventArgs e)
{
   if(e.Key == Key.Enter)
   {
      TargetButton_Click(sender, null);
   }
 }  

似乎工作正常。在我的情况下,我在 WPF 表单上有文本框,用户输入值和点击,它似乎工作正常。某些控件可能存在问题,这些控件在表单或其他内容之前覆盖(获取 KeyUp 事件),因此您的里程可能会有所不同。:)

于 2015-01-26T01:05:28.213 回答