wpf 如何为每个列表框添加样式,后面的代码中有项?

uinbv5nw  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(198)

我正在尝试为每个列表框添加不同的样式。在我的项目中的项目。有人能帮助我吗?
`

foreach (var item in orderList)
            {
                var itm = new ListBoxItem();

                if (item.CustomOrder)
                {
                    itm.Content = item;
                    itm.Style = customOrderStyle;
                    listbox.Items.Add(itm);

                }
                else
                {
                    itm.Content = item;
                    itm.Style = newOrderStyle;
                    listbox.Items.Add(itm);

                }
            }

`

我知道我正在添加列表框项目到列表框,这就是为什么内容不显示。我尝试了一些不同的事情,但仍然不知道如何解决它。

jdg4fx2g

jdg4fx2g1#

检查Data Templating Overview链接并转到“将DataTemplate创建为资源”一节(并阅读下一节)。它显示了如何将DataTemplate定义为资源以及如何使用DataTemplate.DataType属性。只是不要为模板指定x:Key,以便WPF可以根据项目类型自动选择合适的模板。
然后,为每个单独的外观项目定义一个数据模型,并停止您正在做的事情:不要显式创建ListBoxItem(让WPF通过DataTemplate来创建)。不要检查CustomOrder属性,而是引入相关的模型类,例如DefaultOrderCustomOrder。然后将这些类型的项添加到绑定到ListBox的公共源集合中:

订单.cs

interface IOrder
{
  ...
}

默认订单.cs

class DefaultOrder : IOrder
{
  ...
}

自定义订单.cs

class CustomOrder : IOrder
{
  ...
}

主窗口.xaml

<Window>
  <ListBox x:Name="OrdersOverview">
    <ListBox.Resources>
      <DataTemplate DataType="{x:Type local:DefaultOrder}">
        ...
      </DataTemplate>

      <DataTemplate DataType="{x:Type local:CustomOrder}">
        ...
      </DataTemplate>
    </ListBox.Resources>
  </ListBox>
</Window>

主窗口.xaml.cs

prtial class MainWindow : Window
{
  private ObservableCollection<IOrder> Orders { get; }

  public MainWindow()
  {
    InitializeComponent();

    this.Orders = new ObservableCollection<IOrder>();
    this.OrdersOverview.ItemsSource = this.Orders;
  }

  private void CreateDefaultOrder()
  {
    var newOrder = new DefaultOrder();

    // Show the new order in the ListBox
    this.Orders.Add(newOrder);
  }

  private void CreateCustomOrder()
  {
    var newOrder = new CustomOrder();

    // Show the new order in the ListBox
    this.Orders.Add(newOrder);
  }
}
63lcw9qa

63lcw9qa2#

一个更典型的WPF实现示例:
第一个

相关问题