当前位置 : 主页 > 网页制作 > css >

wpf – 将Popup绑定到另一个控件的相对屏幕位置

来源:互联网 收集:自由互联 发布时间:2021-06-13
我正在编写一个带有复杂Popup的XBAP(Canvas Z-index为99,其上有一个网格…),我想“附加”到打开它的按钮,并按下该按钮,无论它在哪里进行屏幕.例如,如果按钮位于ListBox或XamDataGrid中,我希望弹
我正在编写一个带有复杂Popup的XBAP(Canvas Z-index为99,其上有一个网格…),我想“附加”到打开它的按钮,并按下该按钮,无论它在哪里进行屏幕.例如,如果按钮位于ListBox或XamDataGrid中,我希望弹出按钮在滚动时跟随按钮.如果它在扩展器下方,我希望它在扩展器强制移动时保持与按钮的连接等.

有任何想法吗?

使用Popup时,弹出窗口最初出现后不会使用PlacementTarget和CustomPopupPlacementCallback.因此,任何使用这些属性都不允许弹出窗口在移动时跟踪按钮.

我实现你想要的几种方式:

>将自定义装饰器附加到按钮并将弹出窗口放入其中.缺点:弹出窗口没有连接到Button或周围的元素,所以它不会继承属性和&来自他们的DataContext.
>将自定义装饰器附加到按钮.当按钮相对于AdornerLayer移动时,此装饰器将获得测量和排列呼叫,允许您手动更新弹出位置.只要您的AdornerDecorator不相对于您的窗口移动(例如,如果它是窗口的直接子项),您可以通过监视窗口大小的更改来轻松检测正在移动的AdornerLayer.缺点:复杂的代码和走吧
>根本不要使用弹出窗口.而是将按钮包裹在< Grid>中.与< Canvas>一起零宽度和高度以及所需位置.在< Canvas>内使用适当的ZIndex为弹出窗口添加UserControl.它将延伸超过Canvas的边缘,这在WPF中很好.而不是使用Popup控件只是控制UserControl的可见性.缺点:不会完全在所有其他对象之上,不能延伸到窗口的边缘(尽管可能不是XBAP的问题).

网友评论