【问题标题】:Change ListBox Item Background color programmatically以编程方式更改列表框项目背景颜色
【发布时间】:2016-07-28 11:18:09
【问题描述】:

我很难理解 XAML 如何与 C# 相关联。 我的问题是,我有两个不同的List<String> 对象填充了内容,我希望一个List<String> 具有背景色“蓝色”,另一个具有背景色“红色”。之后我想在我的ListBox中显示它

我的 XAML 列表框代码:

<ListBox x:Name="ListBox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single" SelectionChanged="ListBoxSelectionChanged">

</ListBox>

我的 C# 代码将所有内容加载到 ListBox 中

public void AddItemsToListBox()
{
     foreach (var object1 in objects1)
     {
         //I want these Objects to be blue
         listBox1.Items.Add(object1.label);
     }
     foreach (var object2 in objects2)
     {
          //I want these Objects to be red
          listBox1.Items.Add(object2.label);
     }
 }

【问题讨论】:

  • 见this answer。在 WPF 中,您必须使用绑定,这样做 Items.Add()-way 已过时。那Thread.Sleep(1) 很臭。您可以使用 async/await 和 await Task.Delay() 来避免 UI 停滞。

标签: c# wpf


【解决方案1】:

给你:

foreach (var object1 in objects1)
{
    Thread.Sleep(1);
    listBox1.Items.Add(new ListBoxItem { Content = object1.label, Background = Brushes.Blue });
 }
 foreach (var object2 in objects2)
 {
     Thread.Sleep(1);
     ListBox2.Items.Add(new ListBoxItem { Content = objects2.label, Background = Brushes.Red });
     //I want these Objects to be red
 }

更好的方法是使用数据绑定、样式等。

【讨论】:

    【解决方案2】:

    需要 50 声望才能发表评论,因此添加为答案

    为什么你不能只在 xaml 中做呢?

    <ListBox x:Name="ListBox1" Background="Red">
    
    </ListBox>
    

    只需添加背景属性,这将为您的列表框着色

    但如果你想在 wpf 上做得更好,我建议你学习 DATABINDING,这样你就不需要手动将对象添加到列表框中

    然后看看 MVVM

    【讨论】:

    • 我不能这样做,因为我在同一个 ListBox 中有两个不同的列表,但我希望每个列表都有不同的颜色
    • 啊,我明白了,你能改变它说的那行吗: ListBox2.Items.Add(objects2.label);它让我相信你有 2 个列表框
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多