WPF模态窗口表现得很奇怪

时间:2010-06-26 18:54:22

标签: wpf modal-dialog

我遇到了一个我不理解的情况,并希望有人在可能的情况下启发我。

创建了一个WPF应用程序。为简单起见,请将此应用程序视为一个窗口。我在这个窗口上放了一些控件,其中有一个TextBox控件(我们称之为TB)。

要求此TB必须始终具有焦点(如果有人通过条形码扫描器读取某些东西或类似物,它应该出现在那里)。

我想在计时器的帮助下实现这一点:每一秒焦点都转移到TB。

直到现在一切正常(正如预期的那样)。

奇怪的是以下内容:让我们说一个新用户想要使用这个窗口,所以她必须登录。我想用一个新的Window对象实现它(让我们称之为W2),这样调用它: / p>

W2.ShowDialog();

这个W2窗口应该是模态的(请记住计时器仍然执行)。

疯狂的是,在 Windows Vista 下,它按预期工作完美(这意味着W2是模态的,用户可以在W2上做什么),<一旦用户想要在W2的文本框中键入内容,Windows XP上的强>>但,焦点在初始窗口上设置回TB(据我所知,这意味着W2 不是模态!!!?我是对的吗?)。

我怎样才能克服这种情况?

这是正确的方法吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

确保将W2的Owner property设置为主窗口。

来自参考文档:

  

当您通过调用ShowDialog打开子窗口时,您还应该设置子窗口的Owner属性。

答案 1 :(得分:1)

我不确定这个设置 - 焦点 - 每几秒钟都是一个好主意。一些输入总是可能出现在丢失和聚焦状态之间的间隔(并且丢失)。替代解决方案是在TB所在的表单上捕获PreviewKeydown事件,并以某种方式将条形扫描器的输出设置为TB。