WPF使用控件附加弹出窗口

时间:2009-11-12 17:32:18

标签: c# wpf popup

我有一个场景,我在我的控件上显示一个弹出窗口。我可以使用PlacementTargetPosition等来执行此操作。

我的问题是当我调整窗口大小并将其移动到桌面上的其他位置时,弹出窗口保持静止,这意味着它不会随着控件设置为PlacementTarget而移动。我能够隐藏它以防其他窗口获得焦点。但是无法用我的控制力附上它。

我该如何解决这个问题? 是否有其他此类控制可用?

4 个答案:

答案 0 :(得分:4)

如果您查看来自MS的所有WPF控件,当您单击Control外部的某个位置时,它们在ControlTemplate中的Popup会自动关闭。 (例如ComboBox)

这个属性负责:StaysOpen="False"

最简单的方法是定义Window,它看起来像Popup并将其位置属性绑定到您的控件上,并使用转换器为其添加一些像素。

答案 1 :(得分:2)

John Christman(上图)有正确的想法。我posted an answer提出了一个类似的问题,在上下文中显示了这种方法。它处理窗口被移动或调整大小的情况。

答案 2 :(得分:1)

这不是一个完美的解决方案,但是如果您有一个可以使用的事件,在这种情况下是Resize或LocationChanged,您可以通过更改其中一个偏移并将其更改回来诱导弹出窗口移动。

这样的事情:

popup.Horizo​​ntalOffset + = 0.01

popup.Horizo​​ntalOffset - = 0.01

答案 3 :(得分:0)

我认为如果不从Popup派生并做一些处理,你就不会得到你想要的行为。

如果您有PlacementTarget,那么您可以获得它应该遵循的Window,对吧?因此,当Popup显示时,观察包含PlacementTarget移动的Window并相应地调整弹出窗口。 Popup派生自Window,因此它应该具有Left和Top属性。