2009-10-18 6 views
2

Regardez la ligne "CETTE LIGNE ####" dans l'exemple suivant.Priorité de Setter remplaçant dans WPF?

<ListBox Grid.Row="0" x:Name="listBoxServers"> 
<ListBoxItem HorizontalContentAlignment="Stretch"> 
    <StackPanel> 
     <TextBlock><Run Text="My computer"/></TextBlock> 
     <TextBlock Foreground="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"> 
      <TextBlock.Style> 
       <Style> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True"> 
          <Setter Property="TextBlock.Foreground" Value="White" /> <!-- THIS LINE #### How can I get this work? --> 
          <Setter Property="TextBlock.Background" Value="Blue" /> <!-- This line here for debugging purposes (to show that these really are called) --> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </TextBlock.Style> 
      <Run Text="localhost"/> 
     </TextBlock> 
    </StackPanel> 
</ListBoxItem> 
</ListBox> 

Comment puis-je obtenir le déclencheur suivant pour remplacer la valeur?

(BTW, par exemple est simplement comprimé ci-dessus. (En application réelle du Style est dans sa propre ressource.))

Répondre

2

Vous devriez être en mesure de le faire avec deux déclencheurs de données, un pour vrai, et un pour faux.

<TextBlock> 
     <TextBlock.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="True"> 
         <Setter Property="TextBlock.Foreground" Value="White" /> 
         <Setter Property="TextBlock.Background" Value="Blue" /> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="False"> 
         <Setter Property="TextBlock.Foreground" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
     <Run Text="localhost"/> 
    </TextBlock> 
+0

Oh, bien sûr, une grande solution de contournement ... Vous vous demandez même s'il y a une priorité absolue? (Non dans ce cas mais quelques autres cas de coin ...) – Ciantic

+0

Je ne suis pas sûr qu'il y ait un moyen de lier facilement et de surcharger, sans faire quelque chose comme ma solution ... Je pense que vous pouvez soit lier, et changer la propriété liée, ou changer en utilisant des déclencheurs de données comme ci-dessus ... –

+0

AFAIK le 'Setter' de la deuxième' DataTrigger' peut être spécifié directement dans 'Style'. Cela servirait de valeur par défaut et le déclencheur l'écrasera. – Palec

4

This post pourrait expliquer pourquoi le déclencheur ne se déclenche pas lorsque vous avez attribué une valeur locale à la propriété.