2010-11-18 4 views
8

J'essaie de changer la surbrillance gris clair par défaut sur un ListViewItem sélectionné pour qu'il soit le surbrillance bleu qui apparaît lorsque le ListView est mis au point. J'ai essayé de réconcilier différentes réponses et sources de StackOverflow en ligne, mais je n'ai pas encore compris de quel genre de XAML j'avais besoin. Je donne les résultats suivants:WPF - couleur non ciblée sélectionnée de ListViewItem avec un GridView

<ListView ItemContainerStyle="{StaticResource checkableListViewItem}" 
      SelectionMode="Multiple" 
      View="{StaticResource fieldValueGridView}"/> 

La référence View ressource est:

<GridView x:Key="fieldValueGridView" AllowsColumnReorder="False"> 
    <GridViewColumn Header="Field"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock FontWeight="Bold" Text="{Binding Path=DisplayName}"/> 
        <TextBlock FontWeight="Bold" Text=": "/> 
       </StackPanel> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=FieldValue}"/> 
</GridView> 

Et la référence ressource ItemContainerStyle est:

<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}" 
     x:Key="checkableListViewItem"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Top" /> 
</Style> 

La propriété de IsEnabledListView ne change, si ce questions. Je voulais en quelque sorte incorporer <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>, ou quelque chose de similaire, pour mettre en surbrillance ListViewItem s qui sont dans un ListView floues.

J'ai le style suivant, mais cela ne semble pas affecter ListViewItem s dans mon ListView, et je pensais que le GridView que j'utilise pourrait être la raison. Lorsque j'ai tenté de remplacer la propriété Template, la propriété View a été ignorée, donc mon GridView n'était pas affiché.

<Style TargetType="ListViewItem"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
         Color="{x:Static SystemColors.HighlightColor}"/> 
    </Style.Resources> 
</Style> 

Comment puis-je souligner en bleu les éléments sélectionnés dans mon ListView quand ce ListView est floue?

Répondre

8

Cela fonctionne pour un ListView qui ne dispose pas d'un GridView

<Style TargetType="{x:Type ListViewItem}"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
         Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"/> 
    </Style.Resources> 
</Style> 

Mise à jour
1.Sans re-templating lors de l'utilisation GridView

<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#FFD9F4FF" Offset="0"/> 
    <GradientStop Color="#FF9BDDFB" Offset="1"/> 
</LinearGradientBrush> 

<Style TargetType="ListViewItem" x:Key="checkableListViewItem"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Top" /> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" /> 
      <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
     </Trigger> 
     <!-- Or if you want to choose another color for unfocused 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsSelected" Value="True" /> 
       <Condition Property="Selector.IsSelectionActive" Value="False" /> 
      </MultiTrigger.Conditions> 
      <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" /> 
      <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
     </MultiTrigger> 
     --> 
    </Style.Triggers> 
</Style> 

2. Reformatage de ListViewItem lors de l'utilisation de GridView.

<LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#FFF1FBFF" Offset="0"/> 
    <GradientStop Color="#FFD5F1FE" Offset="1"/> 
</LinearGradientBrush> 
<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#FFD9F4FF" Offset="0"/> 
    <GradientStop Color="#FF9BDDFB" Offset="1"/> 
</LinearGradientBrush> 
<LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#FFEEEDED" Offset="0"/> 
    <GradientStop Color="#FFDDDDDD" Offset="1"/> 
</LinearGradientBrush> 
<LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0"> 
    <GradientStop Color="#FFEAF9FF" Offset="0"/> 
    <GradientStop Color="#FFC9EDFD" Offset="1"/> 
</LinearGradientBrush> 

<Style TargetType="ListViewItem" x:Key="checkableListViewItem"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Top" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListViewItem}"> 
       <Border CornerRadius="2" SnapsToDevicePixels="True" 
         BorderThickness="{TemplateBinding BorderThickness}" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         Background="{TemplateBinding Background}"> 
        <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition MaxHeight="11" /> 
           <RowDefinition /> 
          </Grid.RowDefinitions> 

          <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" /> 
          <GridViewRowPresenter Grid.RowSpan="2" 
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </Grid> 
        </Border> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" /> 
         <Setter Property="BorderBrush" Value="#FFCCF0FF" /> 
         <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" /> 
         <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
         <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" /> 
         <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
         <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" /> 
        </Trigger> 
        <!--<MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True" /> 
          <Condition Property="Selector.IsSelectionActive" Value="False" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" /> 
         <Setter Property="BorderBrush" Value="#FFCFCFCF" /> 
        </MultiTrigger>--> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True" /> 
          <Condition Property="IsMouseOver" Value="True" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" /> 
         <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
        </MultiTrigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
Questions connexes