我有一个自定义UserControl,它尝试为文本框重新创建自动完成。当用户输入时,文本用于过滤提供的项目集合,然后弹出窗口显示一个ListBox,其中的项目与用户键入的内容相匹配。
不幸的是,如果用户决定从应用程序切换到另一个窗口(浏览器,MSWord,任何东西!),弹出窗口仍然位于每个其他窗口之上!
另外,如果我在弹出窗口的情况下移动我的窗口(托管自定义控件),弹出窗口就会保持原位(并且不会跟随窗口)!这有点好笑,但显然是不可接受的行为。我环顾四周,但只发现了一篇关于这个问题的帖子两年没有得到答复:(
答案 0 :(得分:15)
实际上,我没有意识到我将Popup的StaysOpen
属性设置为true
。
<Popup StaysOpen="False" />
实际上对我有用。
答案 1 :(得分:4)
我在类似的情况下遇到了同样的问题。我所做的是我订阅了控件的所有可能的“失去焦点”事件,并且还获得了托管控件并订阅其GotMouseCapture和LocationChanged事件的窗口。所有这些事件的事件处理程序都将弹出窗口的IsOpen属性设置为false。
您可以使用以下方式获取托管窗口:
parentWindow = Window.GetWindow(this);
所有其他代码只是很多订阅事件来做同样的事情。
P.S。我不是说这是一个非常好的或最佳的解决方案,但对我来说效果很好:)。
答案 2 :(得分:0)
当弹出窗口显示在屏幕上时,如果其父级重新定位,则不会重新定位。
所以看起来它不是自动完成文本框的一个非常好的候选者。我认为当您将鼠标悬停在某个项目上时,该课程更多地用于显示信息。