2010-11-28 11 views
1

J'utilise un contrôle ListView avec deux colonnes, l'une est du texte et l'autre un rectangle init. Lorsqu'un élément est sélectionné, je veux que le contenu de l'élément soit blanc (à la fois le texte de la colonne 1 et le rectangle de la colonne 2), mais ce qui se passe est que seul le texte devient blanc.WPF - Style de sélection ListView

Ceci est mon XAML:

<Window x:Class="Selection.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" > 
<Grid> 
    <Grid.Resources> 
     <ResourceDictionary> 

      <Style x:Key="@ListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType='{x:Type ListViewItem}'> 
          <Grid SnapsToDevicePixels="True" Margin="0"> 
           <Border x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" /> 
           <GridViewRowPresenter x:Name="Content" TextBlock.Foreground="{TemplateBinding Foreground}" 
          Content="{TemplateBinding Content}" Columns="{TemplateBinding GridView.ColumnCollection}" /> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="true"> 
            <Setter Property="TextElement.Foreground" Value="White" TargetName="Content" /> 
            <Setter Property="Background" Value="DarkGray" TargetName="Bd"/> 
           </Trigger> 
           <MultiTrigger> 
            <MultiTrigger.Conditions> 
             <Condition Property="IsSelected" Value="true" /> 
             <Condition Property="Selector.IsSelectionActive" Value="false" /> 
            </MultiTrigger.Conditions> 
            <Setter Property="Background" TargetName="Bd" 
           Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" /> 
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
           </MultiTrigger> 
           <Trigger Property="IsEnabled" Value="false"> 
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 

      <DataTemplate x:Key="@TextCellTemplate"> 
       <TextBlock Text="{Binding Name}"/> 
      </DataTemplate> 

      <DataTemplate x:Key="@TrubleCellTemplate"> 
       <Rectangle Width="20" Height="20" Fill="Black"></Rectangle> 
      </DataTemplate> 

     </ResourceDictionary> 
    </Grid.Resources> 


    <ListView ItemsSource="{Binding Persons}" Style="{DynamicResource @ListView}" ItemContainerStyle="{DynamicResource @ListViewItemStyle}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Width="40" CellTemplate="{DynamicResource @TextCellTemplate}" /> 
       <GridViewColumn Width="131" CellTemplate="{DynamicResource @TrubleCellTemplate}" /> 
      </GridView> 
     </ListView.View> 

    </ListView> 

</Grid> 

Voici le code derrière:

public partial class MainWindow : Window 
{ 
    public List<Person> Persons { get; set; } 

    public MainWindow() 
    { 
     Persons = new List<Person> {new Person {Name = "Ashton"}}; 
     DataContext = this; 
     InitializeComponent(); 
    } 
} 

public class Person 
{ 
    public string Name { get; set; } 
} 

alt text

Répondre

2

Vous pouvez ajouter un DataTrigger pour IsSelected à votre @TrubleCellTemplate comme cette

<DataTemplate x:Key="@TrubleCellTemplate"> 
    <Rectangle x:Name="rectangle" Width="20" Height="20" Fill="Black"></Rectangle> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" 
        Value="True"> 
      <Setter TargetName="rectangle" Property="Fill" Value="White"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

Merci !!!!!!!!!!!!!!!!!!!!!!!!!!! – Erez