我正试图为ErrorTemplates
的淡入和淡出设置动画,以免因太快发生而过多地吓坏我的用户。我想出的是下面的代码(不起作用)。我猜ErrorTemplate
无法访问控件上附加的Validation.HasError
属性。我还在DataTrigger
上尝试Validation.HasError
绑定self
,但这也不起作用。
<ControlTemplate x:Key="ValidationTemplate">
<ControlTemplate.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation AutoReverse="true"
Duration="0:0:0.5"
RepeatBehavior="3x"
Storyboard.TargetName="border"
Storyboard.TargetProperty="Opacity"
To="0.6" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
<Border x:Name="border"
BorderBrush="Red"
BorderThickness="1"
CornerRadius="2"
Opacity="0.0">
<AdornedElementPlaceholder Margin="-1" />
</Border>
</ControlTemplate>
- 更新 我发现另一个不那么通用但很好的方法是通过使用visual statemanager实现ValidationStates可视状态组来重新设置控件。 http://msdn.microsoft.com/en-us/library/ms752068%28v=vs.110%29.aspx
答案 0 :(得分:2)
您使用DataTrigger
开启了正确的轨道。
但是你需要绑定到装饰者的AdornedElement
Validation.HasError
属性:
<ControlTemplate x:Key="ValidationTemplate">
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding ElementName=adorner,
Path=AdornedElement.(Validation.HasError)}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation AutoReverse="true"
Duration="0:0:0.5"
RepeatBehavior="3x"
Storyboard.TargetName="border"
Storyboard.TargetProperty="Opacity"
To="0.6" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</ControlTemplate.Triggers>
<Border x:Name="border" BorderBrush="Red" BorderThickness="1" CornerRadius="2"
Opacity="0.0">
<AdornedElementPlaceholder Margin="-1" x:Name="adorner" />
</Border>
</ControlTemplate>