1. ホーム
  2. wpf

[解決済み] WPF ListViewの選択範囲オフ

2022-07-07 22:21:53

質問

WPFの選択範囲をオフにすることは可能でしょうか? ListView の選択をオフにして、ユーザーが行をクリックしたときに、行がハイライトされないようにすることは可能ですか?

1行目をクリックしたときに0行目と同じように見えるようにしたいのですが。

関連する可能性があります: ホバー/選択の外観をスタイルすることができますか? たとえば、青いグラデーションのホバー ルック (行 3) をカスタム ベタ色に置き換えることができます。私は この この などがありますが、残念ながら役に立ちません。

(ListViewを使わずに同じことを実現するのもOKです。ただ、ListViewのように論理スクロールやUI仮想化を使えるようにしたいです)

ListViewのXAMLは。

<ListView Height="280" Name="listView">
    <ListView.Resources>
        <!-- attempt to override selection color -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightColorKey}"
                         Color="Green" />
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
                <!-- more columns -->
            </GridView.Columns>
        </GridView>
     </ListView.View>
</ListView>

どのように解決するのですか?

Martin Konicek のコメントに従って、最も簡単な方法で、項目の選択を完全に無効にします。

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Focusable" Value="false"/>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

しかし、ListViewの機能、例えば項目を選択する機能が必要な場合、以下のように選択された項目のスタイルを視覚的に無効にすることができます。

これを行うには、ListViewItemの ControlTemplate を変更する方法から、単にスタイルを設定する方法(より簡単)まで、さまざまな方法でこれを行うことができます。 ListViewItems のスタイルを作成するには、リストビューの を使用します。 ItemContainerStyle を使用してListViewItemsのスタイルを作成し、それが選択されたときに背景とボーダーブラシを「オフにする」ことができます。

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="IsSelected"
                         Value="True">
                    <Setter Property="Background"
                            Value="{x:Null}" />
                    <Setter Property="BorderBrush"
                            Value="{x:Null}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
    ...
</ListView>

また、項目が選択されたときにユーザーに通知する他の方法がない限り(または単にテストのため)、値を表すカラムを追加することができます。

<GridViewColumn Header="IsSelected"
                DisplayMemberBinding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" />