Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用WPF动画刷新错误文本_Wpf_Xaml - Fatal编程技术网

如何使用WPF动画刷新错误文本

如何使用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显示了文本框。在下面的代码中,TextBoxViewModel源自IDataErrorInfo

TextBoxViewModel的xaml

<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:如果您有其他问题,请提出新问题。