【发布时间】:2018-01-08 20:24:36
【问题描述】:
我尝试遵循此问题的答案中描述的模式。 How to set focus to textbox using MVVM?
但是,我在键盘焦点的概念上遇到了麻烦。如果我有记事本或其他一些应用程序与我的 WPF 应用程序同时运行并单击记事本将键盘焦点放在那里,然后做一些事情使我的其他应用程序将焦点放在它的一个文本框中,然后触发给出我的应用程序的文本框现在具有键盘焦点的视觉提示。但是,当我开始输入时,我可以看到情况并非如此,因为文本实际上是进入记事本。
这是我的触发器的 xaml。
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding ReadyForDataEntry}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
</DataTrigger>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="Background" Value="Lavender"/>
<Setter Property="BorderBrush" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
基本上文本框有时会亮起边框和背景颜色,指示该文本框的 IsKeyboardFocused = true,即使键盘输入将由最后单击的任何应用程序(例如,一个笔记、记事本)接收。什么是我失踪了?当键盘焦点显然根本不正确时,为什么 WPF 控件会将 IsKeyboardFocused 设置为 true?
【问题讨论】:
-
完整的最小示例请。您的示例在我的机器上运行良好
-
什么意思?你完全按照我说的做了吗?
-
是的。单击记事本会将背景变回白色(默认)。您的 DataTrigger 实际上可能是问题所在。一个完整的最小示例总是有帮助
-
我正在努力。最初单击记事本不是问题。问题是当键盘焦点丢失到记事本后服务触发事件将焦点放回控件时。问题是键盘焦点并没有真正回到控件中,即使触发器点亮它。我必须使用会复制问题的后台服务编写一些代码,然后我将发布一个 github 链接。创建一个最小的示例需要一些时间,但我会在有链接时编辑问题。
-
我在答案中包含了一个最小的示例,它可靠地重现了 Windows 7 上的问题。这是一个古老的已知问题(至少我知道)。