我正在编写一个带有复杂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的问题).