C#/WPF

[WPF] ListView 선택 항목 배경 색 없애기

kjun.kr 2022. 7. 6. 00:03
728x90
728x170

ListView 에 RadioButton 을 넣게 되면 아래 처럼 불필요하게 선택 항목에 배경이 생기게된다.

xaml 코드

<Window x:Class="Wpf.ListViewSelectItemTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListView ItemsSource="{Binding Datas}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <RadioButton 
                        Content="{Binding}" 
                        IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                        GroupName="1"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

cs코드

using System.Collections.Generic;
using System.Windows;

namespace Wpf.ListViewSelectItemTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<string> Datas { get; set; }


        public MainWindow()
        {
            InitializeComponent();

            Datas = new List<string>();
            Datas.Add("1");
            Datas.Add("2");
            Datas.Add("3");
            Datas.Add("4");

            this.DataContext = this;
        }
    }
}

 

이를 아래 처럼 xaml 단에 처리를 하게되면 아래 처럼 선택항목의 배경을 없앨수 있다.

xaml 코드

<Window x:Class="Wpf.ListViewSelectItemTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ListView ItemsSource="{Binding Datas}">
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Background" Value="Transparent" />
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="VerticalContentAlignment" Value="Center"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                                <Border Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                    <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="{TemplateBinding Padding}" />
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.ItemTemplate>
                <DataTemplate>
                    <RadioButton 
                        Content="{Binding}" 
                        IsChecked="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}"
                        GroupName="1"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>

소스
https://github.com/kei-soft/KJunBlog/tree/master/Wpf.ListViewSelectItemTest

728x90
그리드형