【问题标题】:ListView Selection color in WPFWPF中的ListView选择颜色
【发布时间】:2019-01-17 15:46:00
【问题描述】:

我是 WPF 新手,我不知道如何在列表视图中更改选择颜色。我尝试了很多事情,但我无法改变。以下是代码:

MainWindow.xaml:

<Window x:Class="MyListView.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:MyListView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Window.Resources>
        <Style TargetType="ListViewItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
            </Style.Resources>
        </Style>
    </Window.Resources>
    <Grid>
        <ListView x:Name="MovieListView" Margin="30,0,50,48" Height="344" VerticalAlignment="Bottom">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Path= MovieID}" />
                        <TextBlock Text="{Binding Path= MovieName}" FontWeight="Bold" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

    </Grid>
</Window> 

MainWindow.xaml.cs

namespace MyListView
{
    public class MyDataModel
    {
        public String MovieName { get; set; }
        public String MovieID { get; set; }

        public MyDataModel(String ID, String Name)
        {
            MovieID = ID;
            MovieName = Name;
        }
    }
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            MovieListView.Items.Add(new MyDataModel("MV_1","Movie 1" ));
            MovieListView.Items.Add(new MyDataModel("MV_2", "Movie 2"));
            MovieListView.Items.Add(new MyDataModel("MV_3", "Movie 3"));
        }
    }
}

能否请您解释一下如何更改选择颜色。

Edit1:添加截图

【问题讨论】:

  • 我刚刚尝试了您的代码,没有进行任何更改,它运行良好。每当我尝试选择一个项目时,它的背景颜色都会变为红色。你还在寻找什么?
  • @ShivaniKatukota 当我单击该项目时,我真的看不到任何颜色变化。我还发布了屏幕截图。请检查。
  • 一定有其他代码阻挡了您的颜色。可能还有其他触发因素或风格?
  • 只有一个ListView,除了ListView之外没有触发器或样式。这是我的测试项目,我不知道它不起作用!!!。

标签: c# wpf xaml listview


【解决方案1】:

如果您使用的是 Windows 8 或更高版本,您应该为 ListViewItem 容器定义一个自定义 ControlTemplate

<ListView x:Name="MovieListView" Margin="30,0,50,48" Height="344" VerticalAlignment="Bottom">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsMouseOver" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="Bd" Value="#1F26A0DA"/>
                                <Setter Property="BorderBrush" TargetName="Bd" Value="#a826A0Da"/>
                            </MultiTrigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                    <Condition Property="IsSelected" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="Bd" Value="#3DDADADA"/>
                                <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/>
                            </MultiTrigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="Selector.IsSelectionActive" Value="True"/>
                                    <Condition Property="IsSelected" Value="True"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="Background" TargetName="Bd" Value="Red"/>
                                <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
                            </MultiTrigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding Path= MovieID}" />
                <TextBlock Text="{Binding Path= MovieName}" FontWeight="Bold" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

【讨论】:

    【解决方案2】:

    看看适合我的作品!

    您使用的是哪个 Windows 版本?

    【讨论】:

    • 哦,是的。我正在使用 Windows 10.Net Framework - 4.6.1 和 Visual Studio 2017。
    • 如果您使用的是航空主题..请查看此答案stackoverflow.com/questions/5736989/…
    • 这也没有帮助。有没有其他办法?
    • 唯一的另一种方法是覆盖 ListViewItem 的模板,就像这里所做的那样 stackoverflow.com/questions/35804844/…
    • 是的,Windows 10 中的功能似乎已损坏。上面的链接应该可以帮助您解决问题。
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多