我有一个View Model对象,它有一个名为IsSearching
的depednency属性;它是bool
。我的表单有一个TextBlock
控件,用于显示匹配的行数。绑定到TextBlock's
Text
属性的属性是int?
类型。在搜索开始时,该属性设置为null
。绑定中的转换器将其显示为“ - ”。
我想在IsSearching
属性为true
时闪烁“ - ”字符串,我不希望它在false
时闪烁。这是我到目前为止所做的:
StoryBoard
:
<Storyboard x:Key="FlashTextBlockText">
<ObjectAnimationUsingKeyFrames RepeatBehavior="Forever" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Hidden}" />
<DiscreteObjectKeyFrame KeyTime="0:0:1" Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
仅限Style
的{{1}}名称:
TextBlocks
<Style BasedOn="{StaticResource {x:Type TextBlock}}" x:Key="FlashBlockText" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSearching}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource FlashTextBlockText}" />
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
属性最初为IsSearching
。当用户点击搜索false
时,它将设置为true并开始闪烁。但它不会停止闪烁。
当Button
设置回StoryBoard
时,如何让IsSearching
停止?
贝
答案 0 :(得分:4)
对属性值进行操作的触发器有两个包含操作的集合:
EnterActions:激活触发器本身时激活此集合中的动作(在您的示例中,当IsSearching变为真时)
ExitActions:当触发器被取消激活时,此处的操作被激活(IsSearching变为false)
因此,您应该通过在ExitActions集合中添加StopStoryboard操作来停止故事板。
无需创建新的DataTrigger,您可以在其中明确检查属性是否已变为false。
<DataTrigger Binding="{Binding Path=IsSearching}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="storyboard" Storyboard="{StaticResource FlashTextBlockText}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="storyboard" />
</DataTrigger.ExitActions>
</DataTrigger>
答案 1 :(得分:1)
当IsSearching = False时,您需要一个DataTrigger。有了这个,你可以做一个StopStoryboard。
以下是一个例子:
<DataTrigger Binding="{Binding IsSearching}" Value="false">
<DataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="YourBeginStoryboard" />
</DataTrigger.EnterActions>
</DataTrigger>
Flash aaaahhhh!宇宙的救世主!
答案 2 :(得分:0)
您是否曾尝试在值为False时添加另一个DataTrigger,然后使用另一个故事板,您可以看到其中的可见性?