如何使用WPF动画刷新错误文本
我使用DataTemplate显示了文本框。在下面的代码中,TextBoxViewModel源自IDataErrorInfo TextBoxViewModel的xaml如何使用WPF动画刷新错误文本,wpf,xaml,Wpf,Xaml,我使用DataTemplate显示了文本框。在下面的代码中,TextBoxViewModel源自IDataErrorInfo TextBoxViewModel的xaml <DataTemplate DataType="{x:Type vms:TextBoxViewModel}"> <DockPanel> <Label Content="{Binding Path=DisplayName}" MinWidth="120" MaxWidth="1
<DataTemplate DataType="{x:Type vms:TextBoxViewModel}">
<DockPanel>
<Label Content="{Binding Path=DisplayName}" MinWidth="120" MaxWidth="150"/>
<TextBox DockPanel.Dock="Left" Text="{Binding Path=DisplayValue,Mode=TwoWay, UpdateSourceTrigger=Default,ValidatesOnDataErrors=True}" Validation.ErrorTemplate="{StaticResource ErrorTemplate}"/>
</DockPanel>
</DataTemplate
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel Orientation="Horizontal">
<AdornedElementPlaceholder x:Name="textBox"/>
<ItemsControl ItemsSource="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}" Foreground="Red"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ControlTemplate>
我试图将错误文本闪现几秒钟,然后将其隐藏。是否有任何方法可以使用XAML WPF动画实现这一点 例如,可以使用DoubleAnimation为TextBlock的不透明度属性设置动画。大概是这样的:
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel Orientation="Horizontal">
<AdornedElementPlaceholder x:Name="textBox"/>
<ItemsControl ItemsSource="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}" Foreground="Red">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0" To="1"
AutoReverse="False"
Duration="0:0:0.5"
RepeatBehavior="3x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ControlTemplate>
例如,可以使用双动画设置TextBlock的不透明度属性的动画。大概是这样的:
<ControlTemplate x:Key="ErrorTemplate">
<StackPanel Orientation="Horizontal">
<AdornedElementPlaceholder x:Name="textBox"/>
<ItemsControl ItemsSource="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}" Foreground="Red">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0" To="1"
AutoReverse="False"
Duration="0:0:0.5"
RepeatBehavior="3x" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ControlTemplate>
谢谢,它起作用了。动画完成后是否可以隐藏文本块?@FaisalM:将AutoReverse属性设置为true。在我的应用程序中有许多选项卡。文本块在一个选项卡中,现在我面临的问题是,每当我切换到此选项卡时,如果以前显示过,则错误文本将闪烁。我认为这是因为我们指定RouteEvent=Loaded。我希望仅当再次显式设置错误时才显示该错误。@FaisalM:如果您有其他问题,请提出新问题。谢谢,它可以工作。动画完成后是否可以隐藏文本块?@FaisalM:将AutoReverse属性设置为true。在我的应用程序中有许多选项卡。文本块在一个选项卡中,现在我面临的问题是,每当我切换到此选项卡时,如果以前显示过,则错误文本将闪烁。我认为这是因为我们指定RouteEvent=Loaded。我希望仅当再次显式设置错误时才显示该错误。@FaisalM:如果您有其他问题,请提出新问题。