2010-11-18 24 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プロパティをオーバーライドしようとしたときに、プロパティが無視されたため、GridViewが表示されませんでした。そのListViewが焦点の合っていないとき

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

は、どのように私は青で、私の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> 
関連する問題