2010-05-18 76 views
1

我有一個ListView定義爲這樣一個ItemContainerStyleWPF觸發/樣式替代另一個

      <ListView Width="auto" 
           SelectionMode="Single" 
           ItemContainerStyle="{StaticResource ItemContStyle}" 
           .... 

然後在baseListViewStyle,我已經定義了一些基本樣式應用到我的ListView S,包括Style觸發:

<Style x:Key="baseListViewStyle" TargetType="ListViewItem"> 
    <Setter Property="Height" Value="20" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Trigger此處突出顯示鼠標懸停時的行。尼斯。

我也有一個DataTriggerListViewItem

   <Style.Triggers> 
       <DataTrigger Binding="{Binding IsTestTrue}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" /> 
        </DataTrigger.EnterActions> 
       </DataTrigger> 

如果測試爲真,那麼一個可愛的小動畫漸變被髮揮出來。除了當我將鼠標移動到「test is true」的行上時,動畫停止並且鼠標懸停在樣式上時,這一切都可以正常工作。

任何想法如何在我的DataTrigger中覆蓋該樣式?

TIA

更新:

SomeFunkyAnimation動畫的背景色。它的XAML是在這裏:

  <Style x:Key="ItemContStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource baseListViewStyle}"> 
      <Style.Resources> 
       <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop"> 
        <ColorAnimation Storyboard.TargetProperty="Background.Color" RepeatBehavior="Forever" From="Red" To="Pink" Duration="0:0:3"/> 
       </Storyboard> 
      </Style.Resources> 

MouseOver觸發器在baseListViewStyle定義。在ItemContStyle中定義了DataTrigger

我試圖消除MouseOver風格觸發,但我相信Listview已經定義了,因此我將覆蓋動漫DataTrigger默認MouseOver風格,沒有工作。

+0

你的*時髦的動畫*動畫是什麼? 「前景」屬性呢?你的'DataTrigger'定義在哪裏?在默認的'ListViewItem'風格,還是它的本地風格?更重要的是:IsMouseOver觸發器和DataTrigger是否在*相同*風格中定義? – gehho 2010-05-18 07:07:53

+0

gehho ...感謝您的期待。原始問題的答案。 – ozczecho 2010-05-18 07:33:26

+0

嗯,我沒有看到錯誤。抱歉... – gehho 2010-05-18 12:05:08

回答

0

好了,在這個問題上放了幾個小時後,我終於找到了解決辦法。出於某種原因,ColorAnimation在鼠標懸停後停止動畫。不知道爲什麼,也許是一個知道的wpf錯誤。解決方法是重新調整我的動畫。下面做同樣的事情:

    <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop"> 
        <DoubleAnimation Storyboard.TargetProperty="Background.Opacity" RepeatBehavior="Forever" AutoReverse="true" From="0.2" To="1.0" Duration="0:0:1"/> 
       </Storyboard> 

然後同DataTrigger與背景的附加二傳手:

   <DataTrigger Binding="{Binding IsTestTrue}" Value="True"> 
        <DataTrigger.EnterActions> 
         <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" /> 
        </DataTrigger.EnterActions> 
        <Setter Property="Background" Value="Red" /> 
       </DataTrigger> 

和平最後。