2010-06-26 79 views
0

我遇到了我不明白的情况,希望有人给我启发,如果可能的话。WPF模态窗口行为怪异

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

有一个要求,这个结核病患者必须始终有重点(以防某人通过条形码扫描仪输入某物或某物时应该出现)。

我想在一个定时器的帮助下实现这一点:每秒都将焦点转移到结核病。

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

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

W2.ShowDialog(); 

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

疯狂的事情是,在Windows Vista中这个工程完美预期(这意味着W2是有模式的,用户可以到她是否应该W2做什么),在Windows XP 尽快用户想要在W2的文本框中输入内容,焦点在初始窗口上重新设置为TB(据我所能解释:这意味着W2是而不是模式!!!?我是对吗?)。

我该如何克服这种情况?

这是正确的做法吗?

在此先感谢

回答

4

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

从引用文档:

当通过调用的ShowDialog打开一个子窗口,你还应该设置子窗口的所有者属性。

+0

说实话:我没有设置这个。我想你是正确的!这一定是缺失的部分。但另一方面:为什么它在Windows Vista上工作? – 2010-06-27 19:25:48

+0

@Sawas:出于某种原因,这在XP中似乎没有完全相同 - 在Vista/7中,没有设置这通常不会导致问题(尽管在技术上它应该在那里设置) – 2010-06-28 16:17:59

1

我不确定这个设置的重点 - 每隔几秒就是一个好主意。总是有可能某些输入会出现在失去焦点状态和获得焦点状态之间的间隔中(并且会丢失)。另一种解决方案是捕捉TB所驻留形式的PreviewKeydown事件,并以某种方式将条形扫描器的输出设置为TB。

+0

谢谢非常适合指向我这个方向。我必须仔细研究如何使用这种技术来实现。来自我的+1!非常感谢 – 2010-06-28 13:44:12