2

と呼ばれる依存関係プロパティを持つView Modelオブジェクトがあります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。ユーザーが Search をクリックするButtonと、 true に設定され、点滅が始まります。でも点滅が止まりません。

をに戻したStoryBoardときに を停止するにはどうすればよいですか?IsSearchingfalse

トニー

4

3 に答える 3

4

プロパティ値で動作するトリガーには、アクションを含む 2 つのコレクションがあります。

  • EnterActions: このコレクションのアクションは、トリガー自体がアクティブ化されたときにアクティブ化されます (この例では IsSearching が true になったとき)

  • 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 に答える