wpf - 将 Popup 绑定(bind)到另一个控件的相对屏幕位置

标签 wpf popup screen position xbap

我正在编写一个带有复杂弹出窗口的 XBAP(Canvas Z-index 为 99,上面有一个网格...)出现在屏幕上。例如,如果按钮位于 ListBox 或 XamDataGrid 中,我希望弹出窗口在按钮滚动时跟随按钮。如果它在 Expander 下方,我希望它在 Expander 迫使它移动时保持与按钮的连接,等等。

有什么想法吗?

最佳答案

使用 Popup 时, 既不PlacementTarget也不CustomPopupPlacementCallback在弹出窗口最初出现后使用。因此,对这些属性的任何使用都不允许弹出窗口在按钮移动时对其进行跟踪。

我想到了几种方法来实现您的愿望:

  1. 附加自定义 Adorner到按钮并将弹出窗口放入其中。缺点:Popup 没有连接到 Button 或周围的元素,因此它不会从它们继承属性和 DataContext。

  2. 附加自定义 Adorner到按钮。当按钮相对于 AdornerLayer 移动时,此装饰器将获得测量和排列调用,允许您手动更新 Popup位置。只要你的AdornerDecorator不会相对于您的 Window 移动(例如,如果它是 Window 的直接子级),您可以轻松检测到 AdornerLayer通过监 window 口大小的变化而移动。缺点:编码复杂且正确。

  3. 不要使用 Popup根本。而是将按钮包裹在 <Grid> 中在<Canvas>旁边具有零宽度和高度以及所需的位置。 <Canvas>里面添加UserControl为具有适当 ZIndex 的弹出窗口。它将延伸超过 Canvas 的边缘,这在 WPF 中很好。而不是使用 Popup控制只是控制 UserControl 的可见性.缺点:不会真正完全位于所有其他对象之上,不能超出窗口边缘(不过对于 XBAP 来说可能不是问题)。

关于wpf - 将 Popup 绑定(bind)到另一个控件的相对屏幕位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/978186/

相关文章:

wpf - 如何知道要在 FindWindowByClassName InnoSetup 函数中使用的 WPF 应用程序的类名

c# - DependencyProperty 绑定(bind)不起作用

wordpress - 弹窗评论无索引

java - 使用 netbeans run 出现弹出窗口,但不使用 jar 文件,JAVAFX

matlab - 在 MATLAB GUI 弹出菜单中写入指数

android - Wakelock 没有打开屏幕?帮助?

wpf - 如何以编程方式禁用 Windows 8 Charms 栏?

WPF 窗口大小

Silverlight 屏幕分辨率

安卓 : Dimming down screen