Wpf 在文本块可见性上触发情节提要。可见

Wpf 在文本块可见性上触发情节提要。可见,wpf,xaml,Wpf,Xaml,我是WPF和XAML的新手,如果这是一个愚蠢的问题,我很抱歉: 我试图在一个文本块上启动一个故事板来改变文本。我想在文本块可见时启动此动画。它看起来是文本块内部唯一可以触发的事件。触发器括号是EventTrigger。如果是这样,据我所知,EventTrigger需要路由事件,但IsVisibilityChanged不是。既然我不能用它,那我该怎么做呢 我附上了一个不起作用(无法编译)的代码示例,只是为了说明我正在尝试做什么: <TextBlock Foreground="LightGra

我是WPF和XAML的新手,如果这是一个愚蠢的问题,我很抱歉:

我试图在一个文本块上启动一个故事板来改变文本。我想在文本块可见时启动此动画。它看起来是文本块内部唯一可以触发的事件。触发器括号是EventTrigger。如果是这样,据我所知,EventTrigger需要路由事件,但IsVisibilityChanged不是。既然我不能用它,那我该怎么做呢

我附上了一个不起作用(无法编译)的代码示例,只是为了说明我正在尝试做什么:

<TextBlock Foreground="LightGray" Text="Payfast Running" Name="AnimatedTextBlock">
    <TextBlock.Triggers>
        <Trigger Property="Visibility" Value="Visible">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <StringAnimationUsingKeyFrames 
                            Storyboard.TargetProperty="(TextBlock.Text)"
                            Duration="0:0:1.5"
                            Storyboard.TargetName="AnimatedTextBlock"
                            RepeatBehavior="Forever">
                            <DiscreteStringKeyFrame Value="Payfast Running" KeyTime="0:0:0"/>
                            <DiscreteStringKeyFrame Value="Payfast Running." KeyTime="0:0:0:5"/>
                            <DiscreteStringKeyFrame Value="Payfast Running.." KeyTime="0:0:1"/>
                            <DiscreteStringKeyFrame Value="Payfast Running..." KeyTime="0:0:1:5"/>
                        </StringAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>
    </TextBlock.Triggers>
</TextBlock>

最后,如果可能的话,我需要在标记中而不是代码隐藏中执行此操作。

我希望在文本块可见时启动此动画

您可以将
TextBlock
Visibility
绑定到
boolean
属性(请注意,您必须添加一个用于布尔值到可见性转换的资源):

通过执行此操作,当
ReadyToPlay
变为
true
时,
TextBlock
将变为可见,
情节提要将同时开始。

我想在TextBlock变为可见时启动此动画

您可以将
TextBlock
Visibility
绑定到
boolean
属性(请注意,您必须添加一个用于布尔值到可见性转换的资源):


这样,当
ReadyToPlay
变为
true
时,
文本块
将可见,
情节提要
将同时开始。

您可能需要将所有内容包装成一种样式

    <TextBlock Foreground="LightGray" Text="Payfast Running" Name="AnimatedTextBlock">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource TemplatedParent}}" Value="Visible">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <StringAnimationUsingKeyFrames 
                                        Storyboard.TargetProperty="(TextBlock.Text)"
                                        Duration="0:0:1.5"                                       
                                        Storyboard.TargetName="AnimatedTextBlock"
                                        RepeatBehavior="Forever">
                                        <DiscreteStringKeyFrame Value="Payfast Running" KeyTime="0:0:0"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running." KeyTime="0:0:0:5"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running.." KeyTime="0:0:1"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running..." KeyTime="0:0:1:5"/>
                                    </StringAnimationUsingKeyFrames>
                               </Storyboard>
                           </BeginStoryboard>
                       </DataTrigger.EnterActions>
                   </DataTrigger>
               </Style.Triggers>
           </Style>
     </TextBlock.Style>
</TextBlock>

您可能需要将所有内容包装成一种样式

    <TextBlock Foreground="LightGray" Text="Payfast Running" Name="AnimatedTextBlock">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource TemplatedParent}}" Value="Visible">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <StringAnimationUsingKeyFrames 
                                        Storyboard.TargetProperty="(TextBlock.Text)"
                                        Duration="0:0:1.5"                                       
                                        Storyboard.TargetName="AnimatedTextBlock"
                                        RepeatBehavior="Forever">
                                        <DiscreteStringKeyFrame Value="Payfast Running" KeyTime="0:0:0"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running." KeyTime="0:0:0:5"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running.." KeyTime="0:0:1"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running..." KeyTime="0:0:1:5"/>
                                    </StringAnimationUsingKeyFrames>
                               </Storyboard>
                           </BeginStoryboard>
                       </DataTrigger.EnterActions>
                   </DataTrigger>
               </Style.Triggers>
           </Style>
     </TextBlock.Style>
</TextBlock>


嗨,谢谢你的回答,这让我走上了正确的道路。我缺少的是,我必须像你说的那样用一种风格来包装它。一旦完成了,我就能够使用属性触发器来实现所需的结果。谢谢你的回答,这让我走上了正确的道路。我缺少的是,我必须像你说的那样用一种风格来包装它。一旦完成了,我就能够使用属性触发器来实现所需的结果。非常感谢你的帮助
    <TextBlock Foreground="LightGray" Text="Payfast Running" Name="AnimatedTextBlock">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource TemplatedParent}}" Value="Visible">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <StringAnimationUsingKeyFrames 
                                        Storyboard.TargetProperty="(TextBlock.Text)"
                                        Duration="0:0:1.5"                                       
                                        Storyboard.TargetName="AnimatedTextBlock"
                                        RepeatBehavior="Forever">
                                        <DiscreteStringKeyFrame Value="Payfast Running" KeyTime="0:0:0"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running." KeyTime="0:0:0:5"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running.." KeyTime="0:0:1"/>
                                        <DiscreteStringKeyFrame Value="Payfast Running..." KeyTime="0:0:1:5"/>
                                    </StringAnimationUsingKeyFrames>
                               </Storyboard>
                           </BeginStoryboard>
                       </DataTrigger.EnterActions>
                   </DataTrigger>
               </Style.Triggers>
           </Style>
     </TextBlock.Style>
</TextBlock>