2010-05-18 13 views
1

J'ai un ListView avec un ItemContainerStyle défini comme tel:WPF Trigger/Style remplace une autre

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

Puis, en baseListViewStyle, j'ai défini certains styles de base à appliquer à mes ListView s, y compris un déclencheur 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> 

Le Trigger met en évidence la ligne lorsque la souris est dessus. Agréable.

J'ai aussi un DataTrigger sur le ListViewItem:

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

Si le test est vrai, une animation peu fade belle se joue. Tout cela fonctionne sauf quand je déplace ma souris sur la ligne où "test est vrai" l'animation s'arrête et le style de la souris est affiché.

Des idées comment je peux remplacer ce style dans mon DataTrigger?

TIA

Mise à jour:

SomeFunkyAnimation anime la couleur de fond. Le XAML est ici:

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

Le déclencheur MouseOver est défini dans baseListViewStyle. Le DataTrigger est défini dans ItemContStyle.

J'ai essayé de retirer la gâchette de style MouseOver mais cela n'a pas fonctionné comme je crois que le Listview a un défaut MouseOver de style déjà défini il remplace mon animation DataTrigger.

+0

Qu'est-ce que votre animation * funky * anime? La propriété 'Foreground' aussi bien? Et où votre 'DataTrigger' est-il défini? Dans le style 'ListViewItem' par défaut, ou est-ce un style local? Plus important: le trigger 'IsMouseOver' et le' DataTrigger' sont-ils définis dans le même style? – gehho

+0

gehho ... merci de regarder. Réponses à la question initiale – ozczecho

+0

Hmmm, je ne vois pas l'erreur alors. Pardon... – gehho

Répondre

0

Bien après avoir laissé tomber quelques heures de ma vie sur ce problème, j'ai finalement trouvé un travail. Pour une raison quelconque, ColorAnimation cesse d'animer après une souris. Ne sait pas pourquoi, peut-être un bug wpf qui sait. La solution était de réorganiser mon animation. Le fait ci-dessous la même chose:

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

Et puis même DataTrigger avec un Setter supplémentaire pour l'arrière-plan:

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

paix enfin.