10

我正在尝试向我的 UserControl 添加叠加效果,我知道这就是 WPF 中使用的装饰器。但是我对它们应该如何工作感到有些困惑。我认为装饰层由 WPF 运行时隐式处理,因此应该始终可用。

但是当我在代码中创建我的 UserControl 实例时,那里没有装饰层。以下代码失败并出现异常:

var view = new MyUserControl();
var target = view.GetAdornerTarget(); // This returns a specific UI control.
var layer = AdornerLayer.GetAdornerLayer(target);
if (layer == null)
{
    throw new Exception("No adorner layer at the moment.");
}

有人可以向我解释一下,这应该如何工作?我需要先将 UserControl 实例放入顶级 Window 吗?还是我需要以某种方式自己定义图层?翻阅文档让我无处可去。

谢谢!

4

2 回答 2

18

由和类AdornerLayer生成。如果可视化树中没有这些类中的任何一个是您的控件的父级,那么它将没有关联的. AdornerDecoratorScrollContentPresenterAdornerLayer

您可以将一个添加AdornerDecorator到您的UserControl中,但这将确保您Adorners仅位于作为UserControl.

ControlTemplateWindowAdornerDecorator的默认值UserControl包括AdornerLayer.

于 2010-04-16T16:10:22.570 回答
0

这完全取决于您调用代码的位置以及控件所在的位置。在您提供的情况下,该控件尚未通过 InitializeComponent() 方法实例化。您实际上必须将控件放置在您的一个视图中的某个位置,或者只是提前在 XAML 中声明它才能拉出 AdornerLayer。

于 2010-04-16T15:20:35.277 回答