4

我面临一个问题,虽然它可能有一个简单的解决方案,但无法找到它。

我有一个页面(比如 mainPage),里面有几个按钮,我通过在 xaml 中为该按钮设置 IsDefault="true" 为一个按钮(比如提交)启用“Enter”按键,它工作正常。

单击我的主页上的其他按钮将打开一个弹出窗口,其中包含 2 个按钮“是”和“否”。当我按下回车键时,为“是”设置 IsDefault="true" 属性将不起作用。(有关信息,它也不适用于提交按钮,这也不是问题,我想我也有解决方案

我应该如何为弹出窗口中的按钮启用此功能?

(有关更多信息,我们有一个按钮,它创建一个弹出窗口,其中包含按钮和文本框。在这种情况下,为弹出窗口中的按钮设置 IsEnable="true" 将为按钮完成工作,但前提是我们单击文本框。在观察到此行为后,我尝试将焦点设置在文本框上,因此它可能会有所帮助,但将焦点设置在文本框上不起作用。用于将焦点设置在文本框上,如下所示:Focusable="True" FocusManager.FocusedElement="{Binding ElementName=textboxName} ")

4

1 回答 1

2

您需要将重点放在Popup第一个上,以便它可以响应Enter关键

WPF中有两种类型的焦点:键盘和逻辑。您可以拥有多个具有逻辑焦点的对象,前提是它们位于不同的焦点范围内(例如,您可以将一个元素集中在 Window 中,将另一个元素集中在 Popup 中),但只有一个对象可以拥有键盘焦点。

要在弹出窗口中设置焦点,我通常只使用在Loaded弹出窗口可见并加载时执行的事件。

MyTextBox.Focus();         // Set Logical Focus
Keyboard.Focus(MyTextBox); // Set Keyboard Focus

编辑

有时,如果您的应用程序中的其他东西在Loaded事件发生后立即窃取焦点,您可以使用Dispatcher来在稍后的DispatcherPriority运行您的焦点代码,例如Input

Dispatcher.BeginInvoke(DispatcherPriority.Input,
    new Action(delegate() { 
        MyTextBox.Focus();         // Set Logical Focus
        Keyboard.Focus(MyTextBox); // Set Keyboard Focus
     }));
于 2013-01-16T13:58:19.653 回答