2

私は wpf で遊んでいて、次の記事を見ました: WPF ListView Inactive Selection Color

私は似たようなことをしたいです。リストビュー項目が選択されたときに境界線を付けたいのですが、背景色を変更したくありません。これが必要な理由は、色分けされたリストビューが必要で、選択されたときに色を表示したいのですが、境界線で選択されていることを知りたいです。

何か案は?

アップデート:

以下の答えを試してみましたが、途中でリストビューアイテムの周りに境界線が表示されましたが、背景色が上書きされました。私が試した正しい構文を取得できません(BasedOnに注意してください):

    <Style x:Key="SourceListView" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
    </Style>

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource SourceListView}" >
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border
                             x:Name="Border"
                             BorderBrush="Transparent"
                             BorderThickness="1">
                        <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

次に、これを試しました:

    <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}"/>
        <Setter Property="Template">
            ...//Same as above
        </Setter>
    </Style>

どちらの試みも背景を白(または透明)に設定するだけです。私はそれが単なる構文であることを知っており、正しい方向への別のナッジをいただければ幸いです:)

4

1 に答える 1

4

ListView の ItemContainerStyle を、項目が選択されたときに背景を変更せずに境界線の色を変更するスタイルに変更します。以下に例を示します。

  <Style x:Key="MyListViewItemStyle" TargetType="{x:Type ListViewItem}">
     <Setter Property="Background" Value="{Binding SourceType, Converter={StaticResource SourceGroupConverter}}" />
     <Setter Property="Template">
        <Setter.Value>
           <ControlTemplate TargetType="{x:Type ListViewItem}">
              <Border
                 x:Name="Border"
                 BorderBrush="Transparent"
                 BorderThickness="1"
                 Background="{TemplateBinding Background}">
                 <GridViewRowPresenter Columns="{TemplateBinding GridView.ColumnCollection}" Content="{TemplateBinding Content}"/>
              </Border>
              <ControlTemplate.Triggers>
                 <Trigger Property="IsSelected" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush" Value="Black"/>
                 </Trigger>
              </ControlTemplate.Triggers>
           </ControlTemplate>
        </Setter.Value>
     </Setter>
  </Style>

そして、次のようなスタイルを使用します。

<ListView ItemContainerStyle="{StaticResource MyListViewItemStyle}">
   ...
</ListView>
于 2009-05-21T22:51:35.020 に答える