WPF如何将弹出窗口与控件关联?

4
我有一个场景,我在我的控件上显示弹出窗口。我可以使用PlacementTargetPosition等来实现这一点。
我的问题是当我调整窗口大小并将其移动到桌面的其他位置时,弹出窗口保持静止,也就是说它不随设置为PlacementTarget的控件移动。我能够在其他窗口获得焦点时隐藏它。但无法将其附加到我的控件上。
如何解决这个问题?是否有其他类似的控件可用?

John Christman(上面)有一个好主意。我在类似的问题上发布了一个答案,展示了这种方法。它可以处理窗口移动或调整大小的情况。 - Jason Frank
3个回答

4

如果你查看微软提供的所有WPF控件,它们的ControlTemplate中的Popup会在单击控件外部的任何位置时自动关闭。(例如ComboBox)

这个属性负责此功能:StaysOpen="False"

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


1

这不是一种完美的解决方案,但如果你有一个事件可以使用,在这种情况下是 Resize 或 LocationChanged,你可以通过改变其中一个 offset 然后再改变回来,来协助弹出窗口移动。

大概像这样:

popup.HorizontalOffset += 0.01

popup.HorizontalOffset -= 0.01


0

我认为如果不从Popup派生并进行一些处理,您将无法获得所需的行为。

如果您有PlacementTarget,则可以获取应该跟随它的窗口,对吧?因此,在Popup显示时,请观察包含PlacementTarget的窗口是否移动,并相应地调整弹出窗口。 Popup从Window派生,因此它应该具有Left和Top属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接