2009-04-23 68 views
8

我有一个自定义UserControl,它试图为文本框重新创建自动完成。当用户键入时,文本用于过滤所提供的项目集合,然后Popup显示一个列表框,其中的项目与用户输入的项目相匹配。当其他窗口焦点时隐藏弹出控件

不幸的是,如果用户决定从应用程序中切换出来到另一个窗口(浏览器的MSWord,任何事情!),弹出仍然每隔窗口的顶部!

另外,如果我将我的窗口(它承载自定义控件)与弹出打开,弹出停留在地方(和不遵循窗口)!这有点有趣,但显然不是可以接受的行为。我环顾四周,但只找到一个职位有关这一点,无人接听两年:(

+0

由于2010年2月时,WPF Autocompletebox有这个问题... :( – 2010-04-24 11:59:50

回答

13

其实,我没有意识到我弹出的StaysOpen属性设置为true

<Popup StaysOpen="False" /> 

实际上对我来说是诀窍。

0

按照Popup documentation

当弹出窗口显示在屏幕上,它并没有,如果祭出了父母被重新定位。

所以这看起来并不像这将是自动完成的文本框很好的候选人。我认为类更多的展示,当你将鼠标悬停在某个项目信息的意思。

+1

组合框使用弹出窗口,并停留在作为组合框移动位置..所以它必须能够 – Schneider 2010-03-09 01:53:55

4

我在类似场景中遇到了同样的问题。我所做的是我订阅了控件的所有可能的“失去焦点”事件,并获得了托管控件并订阅其GotMouseCapture和LocationChanged事件的窗口。所有这些事件的事件处理程序都将弹出窗口的IsOpen属性设置为false。

你可以利用这个得到托管窗口:

parentWindow = Window.GetWindow(this); 

所有其他代码只是很多订阅事件做同样的事情。

P.S.我不是说这是一个漂亮的或最佳的解决方案,但它对我来说很好:)

相关问题