2009-11-12 119 views
4

我有一个场景,我在控件上显示一个弹出窗口。我能够做到这一点使用PlacementTarget,PositionWPF附加弹出窗口与控件

我的问题是,当我调整窗口大小,并将其移动到桌面上的其他地方,弹出窗口保持不动,意味着它不随控制集移动为PlacementTarget。我可以隐藏它,以防其他窗口变得焦点。但无法将其与我的控制附加。

我该如何解决这个问题? 有没有其他的这种控制可用?

回答

0

我不认为你会得到你想要的行为,而无需派生Popup并做一些处理。

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

4

如果您查看MS中的所有WPF控件,则当您单击Control之外的某个位置时,ControlTemplate中的Popup将自动关闭。 (例如,组合框)

这是该物业负责人认为:StaysOpen="False"

最简单的黑客是定义一个Window它会看起来像一个Popup并结合其位置属性到您的控制与转换器增加了一些像素它。

1

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

像这样:

popup.Horizo​​ntalOffset + = 0.01

popup.Horizo​​ntalOffset - = 0.01

2

约翰克里斯特曼(上面)具有正确的想法。 I posted an answer的问题涉及在上下文中显示这种方法的类似问题。它处理窗口被移动或调整大小的情况。