2010-11-18 39 views
8

我试图将选定的ListViewItem上的默认浅灰色突出显示为ListView聚焦时显示的蓝色突出显示。我一直试图调和不同的StackOverflow答案和在线来源,但我还没有弄清楚我需要什么样的XAML。我有以下几点:WPF - 使用GridView选择未聚焦的ListViewItem的颜色

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

引用的View资源是:

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

和引用ItemContainerStyle资源是:

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

ListViewIsEnabled财产确实发生了改变,如果事项。我想以某种方式合并<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>,或类似的东西,以突出显示选中的ListViewItem,这些是在未聚焦的ListView中。

我有以下风格,但这似乎不影响ListViewItem s在我的ListView,我认为我使用的GridView可能是原因。当我试图覆盖Template属性时,View属性被忽略,因此我的GridView未被显示。

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

如何在蓝色突出我ListView所选项目时ListView是重点不突出?

回答

8

这将使用的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时不会有一个GridView

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

更新
1.Without重新模板一个ListView工作。使用GridView时重新模板ListViewItem。

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