2010-11-18 3 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 자원은 다음 ListViewIsEnabled 속성이 변화하지

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

, 그 경우 나는 다음이 문제. 어떻게 든 <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/> 또는 그와 비슷한 것을 통합하여 ListViewItem을 강조 표시하여 초점이 맞지 않는 ListView에 강조 표시하려고했습니다.

나는 다음과 같은 스타일을 가지고 있지만, 내 ListViewListViewItem들에 영향을하지 않는 것, 그리고 내가 이유가 될 수 사용하고있어 GridView 생각했다. Template 속성을 덮어 쓰려고 시도했을 때 이 표시되지 않으므로 View 속성이 무시되었습니다. 나는 파란색으로 강조하려면 어떻게

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

ListView에서 선택한 항목이 ListView는 산만 때?

답변

8

2의 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> 
사용하는 경우

<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 재 템플릿을의 GridView이없는 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> 
관련 문제