2

我有一个视图模型对象,它有一个名为的依赖属性IsSearching;它是一个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仅用于命名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. 当用户点击 SearchButton时,它被设置为 true 并开始闪烁。但它不会停止闪烁。

我如何在设置回StoryBoard时停止?IsSearchingfalse

托尼

4

3 回答 3

4

对属性值进行操作的触发器有两个包含操作的集合:

  • EnterActions:当触发器本身被激活时,此集合中的操作被激活(在您的示例中,当 IsSearching 变为真时)

  • ExitActions:当触发器被停用时,此处的操作被激活(IsSearching 变为 false)

所以你应该通过在 ExitActions 集合中添加一个 StopStoryboard 动作来停止故事板。

无需在其中显式检查属性是否变为 false 的地方创建新的 DataTrigger。

<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>
于 2012-07-14T09:45:48.433 回答
1

当 IsSearching = False 时,您需要一个 DataTrigger。有了它,你可以做一个 StopStoryboard。

这是一个例子:

<DataTrigger Binding="{Binding IsSearching}" Value="false">
     <DataTrigger.EnterActions>
          <StopStoryboard BeginStoryboardName="YourBeginStoryboard" />
     </DataTrigger.EnterActions>
</DataTrigger>

闪啊啊啊啊!宇宙的救世主!

于 2012-07-13T15:50:58.193 回答
0

您是否尝试过在值为 False 时添加另一个 DataTrigger,然后再创建另一个情节提要,在其中您可以看到可见性?

于 2012-07-13T15:55:18.923 回答