【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>
效果
编程是个人爱好