WPF装饰器类有用吗?

8

我需要创建一个控件来绘制其子元素周围的边框。因此,我创建了一个类,并从Decorator派生:

class RoundedBoxDecorator : Decorator
{
    protected override Size ArrangeOverride(Size arrangeSize)
    {
        //some source
    }

    protected override void OnRender(DrawingContext dc)
    {
        //some source
    }
}

这段代码可以正常工作,但是我对使用Decorator作为祖先类有一些疑虑。我在MSDN中发现它没有特殊的方法或属性,只是从其祖先类(UIElement或FrameworkElement)继承而来。ArrangeOverride和OnRender也是如此。

那么,Decorator类是为了什么而设计的?它是否有意义使用呢?或者我可以从FrameworkElement派生出来?

1个回答

11
除了继承自FrameworkElement的内容外,Decorator类还实现了一个Child属性(类型为UIElement),并实现了IAddChild接口。因此,Decorator是可以包含另一个元素的最基本的元素。
你为什么不能使用一个Border元素(它继承自Decorator)来创建围绕子元素的边框呢?

谢谢你的回答。我需要一些特殊的边框,所以我决定实现自己的装饰器。 - darja
如果这是一个边框,我会从Border派生出来,至少让语义选择更清晰。我不知道你想要实现什么,但是RoundedBoxDecorator听起来有点像是Border.CornerRadius的变通方法。 - grek40

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接