2012-07-13 9 views
2

我有一個View Model對象,它具有一個叫做IsSearching的快捷屬性;它是一個bool。我的表單有一個TextBlock控件,用於顯示匹配行的數量。綁定到TextBlock'sText屬性的屬性是int?類型。在搜索開始時,酒店設置爲null。綁定中的轉換器顯示爲「 - 」。當ViewModel的依賴項屬性具有一定的值時,如何讓aTextBlock僅閃爍?

我希望「 - 」字符串閃爍,而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> 

一種只TextBlocks名爲Style

<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。當用戶點擊搜索Button時,它被設置爲true並開始閃爍。但它不停止閃爍。

IsSearching設置回false時,我如何獲得StoryBoard

Tony

回答

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> 
+0

謝謝!這也是有效的,比解決方案更清潔。我修改了我的代碼以使用此方法。 – 2012-07-17 15:06:09

+0

謝謝彼得。你的解決方案更清潔。學到了新東西。 – KornMuffin 2012-11-06 15:10:22

1

當IsSearching = False時,您需要DataTrigger。有了這個,你可以做一個StopStoryboard。

下面是一個例子:

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

閃存aaaahhhh!宇宙的救世主!

+0

謝謝!這工作。我不知道StopStoryBoard類。 – 2012-07-13 16:20:03

0

您是否嘗試過在值爲False時添加另一個DataTrigger,然後創建另一個故事板,在那裏只有Visiblity可見?

相關問題