2010-11-03 17 views
1

J'ai propre style sur la liste, j'utilise dans le modèle de données de style et également le modèle de contrôle. Dans le modèle de données, je crée un élément de zone de liste avec des zones de texte. Dans le modèle de contrôle, je veux créer un déclencheur qui change la couleur de premier plan d'une zone de texte si l'élément de la liste est sélectionné.WPF-cible de déclenchement pas trouvé

Voici quelques de style:

<Style x:Key="lbStyle" TargetType="{x:Type ListBox}"> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid Name="MainGrid"> 
         <TextBlock Name="tbName" Text="{Binding Value.nick}" 
             Grid.Column="0" Grid.Row="0" Margin="2,2,2,2" 
             FontSize="13" FontWeight="Medium"></TextBlock> 
        </Grid> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="tbName" Property="Foreground" Value="Black"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 

Le problème est, je reçois erreur de compilation: Impossible de trouver le tbname cible de déclenchement.

Répondre

0
<Style TargetType="ListBox"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="{Binding}" Margin="2" FontSize="13" FontWeight="Medium"> 
        <TextBlock.Style> 
         <Style BasedOn="{StaticResource {x:Type TextBlock}}" TargetType="TextBlock"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}, Path=IsSelected}" Value="True"> 
            <Setter Property="Foreground" Value="Black"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBlock.Style> 
       </TextBlock> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
0

Votre code de modèle est incorrect. Vous appliquez le modèle ListBoxItem au modèle ListBox. De plus, vous n'avez rien ajouté à ControlTemplate.

Je réécrite il:

<Style x:Key="itemStyle" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <ContentPresenter x:Name="itemContent"/> 

        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter TargetName="itemContent" Property="TextBlock.Foreground" Value="Red"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

ListBox avec style appliqué:

<ListBox ItemContainerStyle="{StaticResource itemStyle}" />