【发布时间】:2019-03-31 01:53:41
【问题描述】:
我们在 Windows 10(更新 1803 - Microsoft Surface Go)中的 WPF 应用程序出现了奇怪的行为。
在应用程序内部,我有一个 Tabcontrol,它的 ItemsSource 在代码隐藏中绑定到对象列表(基于用户控件)。
每当我在文本框内按时,Windows 10 键盘就会立即出现和消失。如果我再次单击文本框,键盘将正确显示。当我在另一个文本框中按下时,同样的情况再次发生(键盘出现/消失,我必须在同一个文本框中再次按下)。
在应用程序的其他部分,这不会发生。
奇怪的是,当我刚拿到平板电脑时,我会发誓这个问题没有发生。从那时起,windows 已经更新。
我怀疑这与其中一个 Windows 更新有关,因为相同的应用程序在具有另一个品牌的 Windows 10 的其他平板电脑上运行良好(我确信其中一个平板电脑具有 2016 年的 Windows 10 LTSB 版本)。
我已尝试删除尽可能多的更新,但无法删除 1803 累积更新。
我使用的 .Net 版本是 .Net 4.0,我尝试更新到 4.7.2 没有成功。正如此线程中所建议的:C# WPF Windows 10 (1803) TouchKeyboard unreliable Issue (Prism ClickOnce)
我看到另一个人抱怨他们只有在特定的 Windows 10 更新后才遇到类似的问题。 https://social.msdn.microsoft.com/Forums/en-US/b9efb4eb-e0a9-4bf0-9985-57a673c42f79/wpf-application-windows-10-touch-keyboard-flickering-issue?forum=wpf
我已尝试切换到平板电脑模式和桌面模式。在两者中都会发生相同的行为。所以,现在我已经默认为带有“控制面板”的桌面模式 - 如果没有连接物理键盘,键盘会出现在该设置中。
我发现的唯一解决方法如下:
-
将 tabcontrol 放在 Grid 和 gridrow 中,并创建第二个 GridRow (height=0),里面有一个文本框(新的 Textbox 必须在 tabcontrol 之外)。当按下其中一个选项卡时,将焦点放在新创建的文本框上。
Keyboard.Focus(焦点框);
当我这样做时,键盘不会在我第一次按下 tabcontrol 内的文本框时消失。
【问题讨论】:
-
您是否尝试使用 tabcontrol 创建一个简单的测试应用程序只是为了消除您自己的应用程序代码?
-
我已经考虑过了。但是知道该应用程序在“其他平板电脑/其他版本的 Windows 10”上确实可以按预期工作,并且在 tabcontrol 的用户控件中也有很多代码(这会使精确定位变得更加困难)并找到可能摆脱一些的解决方法阐明真正的问题......我还没有这样做。
-
只是想补充一点,这个问题在 2021 年仍然存在。同时使用带有 .Net 4.7.2 的 WPF,我可以确认该行为。可悲的是,原始问题中提供的解决方法也不适用于我。每次用户通过触摸输入聚焦文本框时,触摸键盘都会再次关闭,用户必须再次点击文本框。
标签: c# wpf keyboard windows-10