2010-11-18 10 views
8

Estoy intentando cambiar el resaltado gris claro predeterminado en un ListViewItem seleccionado para que sea el resaltado azul que aparece cuando se enfoca el ListView. He intentado reconciliar diferentes fuentes y respuestas de StackOverflow en línea, pero aún no he descubierto qué tipo de XAML necesito. Tengo el siguiente:WPF: color desenfocado seleccionado de ListViewItem con un GridView

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

El View recurso referenciado es:

<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> 

Y la referencia ItemContainerStyle recurso es:

<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> 

IsEnabled propiedad El ListView 's cambia, si eso asuntos. Quería de alguna manera incorporar <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>, o algo similar, para resaltar ListViewItem s seleccionados que están en un ListView desenfocado.

Tengo el siguiente estilo, pero esto no parece afectar ListViewItem s en mi ListView, y pensé que el GridView que estoy usando podría ser el motivo. Cuando traté de anular la propiedad Template, se ignoró la propiedad View, por lo que mi GridView no se mostraba.

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

¿Cómo destaco en azul los elementos seleccionados en mi ListView cuando ese ListView es fuera de foco?

Respuesta

8

Esto funcionará para un ListView que no tiene 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> 

actualización
1.Without re-plantillas cuando se utiliza 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. Replanteando el ListViewItem cuando se usa 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> 
Cuestiones relacionadas