8

我有一个自定义 UserControl,它试图为文本框重新创建自动完成功能。当用户键入时,文本用于过滤提供的项目集合,然后弹出窗口显示一个列表框,其中包含与用户键入的内容相匹配的项目。

不幸的是,如果用户决定从应用程序切换到另一个窗口(浏览器、MSWord 等等!),弹出窗口仍然位于所有其他窗口的顶部!

此外,如果我在弹出窗口打开的情况下移动窗口(托管自定义控件),弹出窗口将保持原位(并且不跟随窗口)!这有点有趣,但显然是不可接受的行为。我环顾四周,但只发现一篇关于此的帖子两年没有得到答复:(

4

3 回答 3

15

实际上,我没有意识到我StaysOpen将 Popup 的属性设置为true.

<Popup StaysOpen="False" />

实际上对我有用。

于 2009-04-28T13:06:53.973 回答
4

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

您可以通过以下方式获取托管窗口:

parentWindow = Window.GetWindow(this);

所有其他代码只是大量订阅事件来做同样的事情。

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

于 2009-04-23T18:39:47.663 回答
0

根据弹出文档

当 Popup 显示在屏幕上时,如果重新定位其父级,它不会重新定位自身。

所以它看起来不是自动完成文本框的一个很好的候选者。我认为该课程更多地用于在您将鼠标悬停在项目上时显示信息。

于 2009-04-23T17:45:04.817 回答