使用a时Popup,弹出窗口最初出现后既不使用PlacementTarget也不CustomPopupPlacementCallback使用.因此,任何使用这些属性都不允许弹出窗口在移动时跟踪按钮.
我实现你想要的几种方式:
将自定义附加Adorner到按钮并将弹出窗口放入其中.缺点:Popup没有连接到Button或周围的元素,因此它不会从它们继承属性和DataContext.
将自定义附加Adorner到按钮.当按钮相对于按钮移动时,此装饰器将进行测量并安排呼叫AdornerLayer,允许您手动更新Popup位置.只要您AdornerDecorator不相对于您移动Window(例如,如果它是窗口的直接子项),您可以AdornerLayer通过监视窗口大小的更改来轻松检测被移动.缺点:复杂的代码和正确的.
根本不要使用Popup.而是将按钮包裹在一个零宽度和高度以及所需位置的<Grid>旁边<Canvas>.在内部为弹出窗口<Canvas>添加UserControl适当的ZIndex.它将延伸超过Canvas的边缘,这在WPF中很好.而不是使用Popup控件只是控制的可见性UserControl.缺点:不会完全在所有其他对象之上,不能延伸到窗口的边缘(尽管可能不是XBAP的问题).
| 归档时间: |
|
| 查看次数: |
8154 次 |
| 最近记录: |