Wpf 当值接收到更新时开始情节提要动画

Wpf 当值接收到更新时开始情节提要动画,wpf,Wpf,在我的主窗口中,我有一个有三行的网格。第一行是带有我的应用程序名称的标题,第二行包含一个文本块,其中包含一个错误消息部分,第三行包含另一个网格,其中包含一个文本框和用于登录的按钮 我的问题在第二排。我想做的是在字符串更改值时显示带有滑动动画的文本块。我不确定谁会读到这篇文章,但它的价值存在于一个服务中。服务只是一个类,它包含可以在视图之间共享的属性。这之所以重要,是因为我在主窗口中放置了一些用户控件。我不能简单地将“Message”属性放在主窗口的视图模型中,因为我不会一直在那里。我需要向用户显

在我的主窗口中,我有一个有三行的网格。第一行是带有我的应用程序名称的标题,第二行包含一个文本块,其中包含一个错误消息部分,第三行包含另一个网格,其中包含一个文本框和用于登录的按钮

我的问题在第二排。我想做的是在字符串更改值时显示带有滑动动画的文本块。我不确定谁会读到这篇文章,但它的价值存在于一个服务中。服务只是一个类,它包含可以在视图之间共享的属性。这之所以重要,是因为我在主窗口中放置了一些用户控件。我不能简单地将“Message”属性放在主窗口的视图模型中,因为我不会一直在那里。我需要向用户显示的“消息”进入服务,这样无论我在哪个视图中,我都可以设置“消息”属性并向用户显示错误

下面是我制作文本块动画的代码,没有任何问题

<Window.Resources>
    <!--Story board animation that slides down in .5 seconds, displays for 5.5 seconds and then retracts.-->
    <Storyboard x:Key="MessageSlide" AutoReverse="True">
        <DoubleAnimationUsingKeyFrames Duration="0:0:5.5"  Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="textBlock">
            <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="50"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded"><!--RoutedEvent="FrameworkElement.Loaded"   t:MessageHandler.CustomTest-->
        <BeginStoryboard Storyboard="{StaticResource MessageSlide}"/>
    </EventTrigger>
</Window.Triggers>

<TextBlock x:Name="textBlock" Grid.Row="1" Background="{Binding Path=DataService.BackgroundColor}" FontSize="32" Foreground="White" Height="0" HorizontalAlignment="Stretch" Margin="0" Text="{Binding Path=DataService.Message, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" TextAlignment="Center" VerticalAlignment="Stretch" />  

我需要完成的是在“EventTrigger”的“RouteEvent”中

<EventTrigger RoutedEvent="FrameworkElement.Loaded">


当前发生的情况是,当主窗口加载时,会发生滑动动画。这并没有真正帮助我,因为我需要这个动画发生可变的次数,即当用户点击错误的按钮,当他们输入无效的输入等。我需要以某种方式创建一个自定义路由事件。我已经调查过了,但我一直无法让它们发挥作用。我设想有一种方法可以创建这个定制路由事件,以便在数据服务中的值更改时引发。我已经看了几天了,但似乎无法让这个自定义路由事件正常工作。这似乎是一条正确的道路,但如果有不同的路线,任何建议都会很好。如果没有,对自定义路由事件的任何帮助也会很好。

出于某种原因,AutoReverse在这里对我不起作用,但是下面的
绑定。TargetUpdated
事件触发器也应该起作用:

<TextBlock Text="{Binding DataService.Message, NotifyOnTargetUpdated=True}" ...>
    <TextBlock.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Height">
                        <EasingDoubleKeyFrame Value="50" KeyTime="0:0:0.5"/>
                        <DiscreteDoubleKeyFrame Value="50" KeyTime="0:0:10.5"/>
                        <EasingDoubleKeyFrame Value="0" KeyTime="0:0:11"/>
                    </DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </TextBlock.Triggers>
</TextBlock>

谢谢,与我尝试做的相比,这非常有帮助,而且非常干净。我在msdn上看到自定义事件可用,所以我从那里开始。我在文档中没有看到更多关于TargetUpdate可用的信息。