我们有一个WPF应用程序,它在画布上有自定义窗口,而后者又包含自定义控件(包含自定义窗口的主画面也是自定义控件显示内容) . 所以基本上可视树看起来像这样(没有隐式Borders和其他东西):
- Windows
- Canvas
- WindowMgr
- CustomWindow (maximized with z-index 0, functioning as background)
- ScrollPresenter
- CustomControl1
- CustomWindow
- ScrollPresenter
- CustomControl2
现在我们需要从那些自定义控件相互拖放(通常从可移动窗口到背景窗口) . 要显示拖放装饰器,需要装饰元素和装饰图层 . 通常示例使用它们的grid或itemscontrol,并从同一元素获取adorner层 .
在此处执行相同操作不起作用,因为ScrollPreseneter / CustomWindows会剪切其内容,从而阻止您拖出窗口 . 现在我们走向可视树,直到我们找到根画布并将其用作装饰元素,但这看起来很脏(而且我们经历的并不是很强大) .
有关强大解决方案的任何建议吗?
1 回答
如果我正确地阅读了您的问题,并且您自己没有提及它,那么您可能正在寻找AdornerDecorator Class,它在可视化树中为其下方的元素提供了一个装饰层 .
假设其名称
ScrollPresenter
来自ContentPresenter,值得注意的是,为了实现高级自定义控件,你可能希望用AdornerDecorator
包围它们的ContentPresenter
,就像Window Class一样,请参阅例如Don’t forget the AdornerDecorator以获得一个很好的实际工作场景,包括拖放操作 .也就是说,通过AdornerDecorator,您将确保所需的AdornerLayer包含在您的自定义控件中,因此无需通过在可视树中向上移动来检索它,例如:
根据您的特定情况,您可能需要
AdornerDecorator
用于自定义窗口,自定义控件或两者 .有关装配体架构的更多详细信息,请参见Adorners Overview .