我有一个场景,我在我的控件上显示一个弹出窗口。我可以使用PlacementTarget
,Position
等来执行此操作。
我的问题是当我调整窗口大小并将其移动到桌面上的其他位置时,弹出窗口保持静止,这意味着它不会随着控件设置为PlacementTarget
而移动。我能够隐藏它以防其他窗口获得焦点。但是无法用我的控制力附上它。
我该如何解决这个问题? 是否有其他此类控制可用?
答案 0 :(得分:4)
如果您查看来自MS的所有WPF控件,当您单击Control外部的某个位置时,它们在ControlTemplate中的Popup会自动关闭。 (例如ComboBox)
这个属性负责:StaysOpen="False"
最简单的方法是定义Window
,它看起来像Popup
并将其位置属性绑定到您的控件上,并使用转换器为其添加一些像素。
答案 1 :(得分:2)
John Christman(上图)有正确的想法。我posted an answer提出了一个类似的问题,在上下文中显示了这种方法。它处理窗口被移动或调整大小的情况。
答案 2 :(得分:1)
这不是一个完美的解决方案,但是如果您有一个可以使用的事件,在这种情况下是Resize或LocationChanged,您可以通过更改其中一个偏移并将其更改回来诱导弹出窗口移动。
这样的事情:
popup.HorizontalOffset + = 0.01
popup.HorizontalOffset - = 0.01
答案 3 :(得分:0)
我认为如果不从Popup派生并做一些处理,你就不会得到你想要的行为。
如果您有PlacementTarget,那么您可以获得它应该遵循的Window,对吧?因此,当Popup显示时,观察包含PlacementTarget移动的Window并相应地调整弹出窗口。 Popup派生自Window,因此它应该具有Left和Top属性。