仅当ViewModel的依赖属性具有某个值时,如何使aTextBlock闪烁?

时间:2012-07-13 15:32:46

标签: wpf storyboard

我有一个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停止?

3 个答案:

答案 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,然后使用另一个故事板,您可以看到其中的可见性?

相关问题