编写拖动效果装饰器与状态回显装饰器

This commit is contained in:
于智纯
2025-09-07 20:41:19 +08:00
parent f6b97e01b8
commit 7212a7dea7
4 changed files with 142 additions and 8 deletions

View File

@@ -14,10 +14,80 @@
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyControl}">
<AdornerDecorator>
<!--使用「状态装饰器」对象做为模版的根对象,保证当前空间具备装饰层与状态切换动画-->
<local:StateAdornerDecorator>
<Border Background="{TemplateBinding Background}">
<TextBlock Text="装饰器测试" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</local:StateAdornerDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type local:StateAdornerDecorator}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:StateAdornerDecorator}">
<!--使用「装饰器」容器做为控件模板的根对象,保证当前控件可以为任何控件提供装饰层-->
<AdornerDecorator>
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Border.Background>
<SolidColorBrush x:Name="BackgroundBrush" Color="White"/>
</Border.Background>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SmartUnit">
<VisualState x:Name="Normal">
<Storyboard>
<!--状态切换动画:背景色、前景色、填充色、描边色、透明度、边框尺寸、描边宽度,边框尺寸-->
<ColorAnimation Storyboard.TargetName="BackgroundBrush"
Storyboard.TargetProperty="Color"
From="White" To="Black"
Duration="0:0:3"
AutoReverse="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Selected">
<Storyboard>
<!--状态切换动画-->
</Storyboard>
</VisualState>
<VisualState x:Name="NormalHover">
<Storyboard>
<!--状态切换动画-->
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedHover">
<Storyboard>
<!--状态切换动画-->
</Storyboard>
</VisualState>
<VisualState x:Name="NormalDragHover">
<Storyboard>
<!--状态切换动画-->
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedDragHover">
<Storyboard>
<!--状态切换动画-->
</Storyboard>
</VisualState>
<VisualStateGroup.Transitions>
<VisualTransition To="Normal">
<Storyboard>
<!--状态切换动画:背景色、前景色、填充色、描边色、透明度、边框尺寸、描边宽度,边框尺寸-->
<ColorAnimation Storyboard.TargetName="BackgroundBrush"
Storyboard.TargetProperty="Color"
From="White" To="Black"
Duration="0:0:3"
AutoReverse="True"/>
</Storyboard>
</VisualTransition>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter/>
</Border>
</AdornerDecorator>
</ControlTemplate>
</Setter.Value>