【WPF】的Decorator 、Adorner和AdornerDecorator

Decorator 和 Adorner简介

它们都有“装饰品”的意思。

Decorator类:Decorator类负责包装某个UI元素,用于在child content的外周绘制装饰;当你从Decorator派生新类时,可以暴露一些有用的依赖属性来定制它。例如,Border类暴露它的BorderBrush, BorderThickness,和CornerRadius,它们都会影响包围child content的边界的绘制方式。

Adorner 抽象类 允许你在已经存在的visual元素之上叠加visuals。相当于给控件添加遮罩层。

AdornerDecorator类:Adorner类和AdornerDecorator一起工作,后者是一个不可见的平面,用于承载adorners。为了成为可视树的一部分,adorners必须有一个容器。AdornerDecorator就是这个容器。AdornerDecorator通常被定义在可视树的顶端(如Window Control的ControlTemplate)。这使得所有的adorners都位于窗口内容之上。

不同点:decorator 和 Adorner综合实例:(Decorator装饰控件可根据内容自动调整大小,Adorner装饰控件,可以手动调节大小,位置)

应用

1、在button 控件上添加效果

自定义定义Adorner

 

namespace 装饰器
{
    public class TestAdornerOnRender : Adorner
    {

        public TestAdornerOnRender(UIElement adornedElement) : base(adornedElement) { }


        protected override void OnRender(DrawingContext drawingContext)
        {

            FormattedText t = new FormattedText(
             "!!!!!",
             CultureInfo.InstalledUICulture,
             FlowDirection.LeftToRight,
             new Typeface("微软雅黑"),
             15, new SolidColorBrush(Colors.Red)
            );
            drawingContext.DrawText(t, new Point(270, 0));
            base.OnRender(drawingContext);
        }


    }
}

 

在窗体界面类中

 private void A_Loaded(object sender, RoutedEventArgs e)
        {
           var  layer = AdornerLayer.GetAdornerLayer(TestBtn);

            layer.Add(new TestAdornerOnRender(TestBtn));
            
          
        }

xaml页面

<Grid>
        <Button x:Name="TestBtn" Content="选中" Loaded="A_Loaded"  Height="100" Width="300">
            
        </Button>
    </Grid>

 效果

 

 

 

 

posted @ 2022-09-01 18:49  小林野夫  阅读(378)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/