2009-12-11 5 views
0

J'ai un ListView qui contient des objets liés à une collection. La représentation des objets que j'ai définis avec DataTemplate. Maintenant, je veux faire ce qui suit. Il y a deux TextBlock s dans mon DataTemplate:Souligner le texte dans l'étiquette qui se trouve dans un DataTemplate

<DataTemplate> 
    <StackPanel> 
     <TextBlock Text="{Binding Name}"></TextBlock> 
     <TextBlock Text="{Binding Path}"></TextBlock> 
    </StackPanel> 
</DataTemplate> 

Je l'ai déjà spécifié un ItemContainerStyle que j'utilise pour réaliser un vol stationnaire effet.

<Style TargetType="ListViewItem" x:Key="ContainerStyle"> 
     <Style.Triggers> 
       <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
    ... and so on 

Mon objectif est de souligner l'TextBlock qui contient le nom, lorsque l'utilisateur déplace la souris sur la ListViewItem. Le chemin ne doit pas être souligné. Comment cela peut-il être réalisé? Comment peut-on accéder à un élément de DataTemplate pour chaque ListViewItem?

Salutations, Martin

Répondre

1

Vous pouvez le faire soit en spécifiant le ControlTemplate pour ListViewItem, ou en changeant le DataTemplate. L'exemple ci-dessous montre les deux méthodes. Notez que vous perdez l'arrière-plan bleu pour le ListViewItem sélectionné lorsque vous utilisez le ControlTemplate (lorsque vous le commentez il renvoie) EDIT: Je n'ai pas bien lu votre exigence. Vous voulez seulement souligner le nom. Alors la seule possibilité est d'utiliser le Datatemplate, ou de réécrire le ControlTemplate du TextBox.

<Window x:Class="Underlining.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" 
    > 
    <StackPanel> 
     <ListView ItemsSource="{Binding}"> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListViewItem"> 
           <Border Name="UnderlineInControlTemplate" BorderThickness="2,0,2,0" 
             BorderBrush="Transparent"> 
            <ContentPresenter HorizontalAlignment="Left" 
                 VerticalAlignment="Center"/> 
           </Border> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsMouseOver" Value="True"> 
             <Setter TargetName="UnderlineInControlTemplate" 
               Property="BorderBrush" 
               Value="BlueViolet"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
       <StackPanel> 
        <Border Name="UnderlineInDataTemplate" BorderThickness="0,0,0,2" 
         BorderBrush="Transparent"> 
         <TextBlock Text="{Binding Name}"/> 
        </Border> 
        <TextBlock Text="{Binding Path}"/> 
       </StackPanel> 
        <DataTemplate.Triggers> 
         <Trigger Property="TextBlock.IsMouseOver" Value="True"> 
          <Setter TargetName="UnderlineInDataTemplate" 
            Property="BorderBrush" 
            Value="Red"/> 
         </Trigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </StackPanel> 
</Window> 
Questions connexes