WPF:如何以编程方式设置 ListView 的样式,以便所有行都具有特定的背景颜色和高度?

标签 wpf listview gridview styles styling

我似乎无法全神贯注。假设我的代码中有以下逻辑:

namespace WPFTesting
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        ObservableCollection<Message> messages = new ObservableCollection<Message>();

        public MainWindow()
        {
            InitializeComponent();
            messages.Add(new Message(DateTime.Now, "This is a test."));
            ListView listView = new ListView();
            GridView gridView = new GridView();
            listView.View = gridView;
            GridViewColumn timeStampColumn = new GridViewColumn();
            timeStampColumn.DisplayMemberBinding = new Binding("Date");
            GridViewColumnHeader timeStampHeader = new GridViewColumnHeader();
            timeStampHeader.Content = "Time";
            timeStampColumn.Header = timeStampHeader;
            gridView.Columns.Add(timeStampColumn);
            GridViewColumn messageColumn = new GridViewColumn();
            messageColumn.DisplayMemberBinding = new Binding("Text");
            GridViewColumnHeader messageHeader = new GridViewColumnHeader();
            messageHeader.Content = "Message";
            messageColumn.Header = messageHeader;
            gridView.Columns.Add(messageColumn);
            Binding binding = new Binding();
            binding.Source = messages;
            listView.SetBinding(ItemsControl.ItemsSourceProperty, binding);
            MainGrid.Children.Add(listView);
        }

        public class Message
        {

            public Message(DateTime aDate, String aText)
            {
                Date = aDate;
                Text = aText;
            }

            public DateTime Date { get; set; }
            public String Text { get; set; }
        }
    }
}

如何以编程方式设置 ListView 的样式,以便所有行都具有特定的背景颜色和高度?请注意,我想避免在 ListView 的项目列表上执行 foreach 循环并设置每个 ListViewItem 的属性,因为这个列表可能有很多项目,而且这可能很昂贵。相反,是否没有某种方法可以使用 Style 类或一些运行时逻辑以编程方式执行此操作?

最佳答案

我想通了。作为示例,您可以这样做:

Style style = new Style();
style.TargetType = typeof(ListViewItem);
style.Setters.Add(new Setter(ListViewItem.BackgroundProperty, Brushes.Pink));
listView.ItemContainerStyle = style;

编辑:您还可以使用触发器为数据集中的某些值有条件地在 ListView 的项目上设置样式。我发现这非常有用,所以这也可能对其他人有帮助:

DataTrigger trigger = new DataTrigger();
trigger.Binding = new Binding("Text");
trigger.Value = "This is a test.";
trigger.Setters.Add(new Setter(ListViewItem.BackgroundProperty, Brushes.Pink));
style.Triggers.Add(trigger);
listView.ItemContainerStyle = style;

以上代码只会在Text字段设置为“This is a test”的情况下设置行的背景。

关于WPF:如何以编程方式设置 ListView 的样式,以便所有行都具有特定的背景颜色和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594349/

相关文章:

c# - 选择一周中的哪几天?

mysql - 更新 ListView 中的多个项目

android - ListView 中的文本阻止在 Android 中触发点击事件

java - 具有自定义 ListView 的警报对话框

c# - 为什么这个GridView无法更新数据

c# - ASP.NET GridView自定义分页最后一页问题

c# - 自动完成框 - 总体值不一致

c# - WIC/WPF : System. GPS.Longitude 和 System.GPS.Latitude 总是返回 NULL(通过 BitmapMetadata)

c# - 如何突出显示 gridview 中的单词

C# Caliburn.Micro 多选