我是WPF和XAML的新品牌,所以如果这是一个愚蠢的问题,我很抱歉:
我正在尝试在TextBlock上启动一个更改文本的StoryBoard。我希望在TextBlock可见时启动此动画。看起来你可以在TextBlock.Triggers括号内触发的唯一事件是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>
最后,如果可能的话,我需要在标记中执行此操作,而不是CodeBehind。
答案 0 :(得分:0)
“我希望在TextBlock可见时启动此动画。”
您可以将TextBlock
的{{1}}绑定到Visibility
属性(请注意,您必须为布尔到可见性转换添加资源):
boolean
然后,在<Window.Resources>
<BooleanToVisibiltyConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
...
<TextBlock Visibility="{Binding Path=ReadyToPlay, Converter={StaticResource BoolToVisConverter}}"/>
属性的setter方法中,您可以添加ReadyToPlay
语句,检查是否启动if
:
Storyboard
通过这样做,当if (value) {
// start Storyboard:
// find Storyboard instance and call Begin() method on it
}
变为ReadyToPlay
时,true
将变为可见,TextBlock
将同时开始。
答案 1 :(得分:0)
您可能需要将其全部包装成样式。
<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>