WPFのListViewを使ってリッチなカスタムリストを作成したとき、クリックしたときに背景色が変わるのを解除したくなります。せっかく綺麗なデザインにしたのにクリックした瞬間に選択色がついて台無しに。しかし残念ながらListViewのプロパティ1つをFalseにすれば済むような話ではありませんでした。
ListViewを選択したときのハイライト
こんなListViewがあったとします。ここで例えば「0005」をクリックしてみます。
するとハイライトされてしまいます。また、マウスが上にあるときのハイライト(0002)も邪魔ですよね。
この2つのハイライトを禁止にします。
ItemContainerStyleを定義する
まずはResourcesにItemContainerStyleを定義します。今回はApp.xamlに定義します。Window.ResourcesやPage.Resourcesでも良いですが、App.xamlのApplication.Resourcesが一番良いのではないでしょうか。
<Application x:Class="WpfApp1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp1" StartupUri="MainWindow.xaml"> <Application.Resources> <Style x:Key="ContainerStyle" TargetType="ListViewItem" > <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ContentControl}"> <Border Background="{TemplateBinding Background}"> <ContentPresenter /> </Border> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Transparent" /> </Trigger> </Style.Triggers> </Style> </Application.Resources> </Application>
そしてこれをListViewのItemContainerStyleで指定します。
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="500" Width="525"> <Grid> <ListView ItemContainerStyle="{StaticResource ContainerStyle}"/> </Grid> </Window>
これでハイライトは消えます。