Wpf 将网格设置为ListBoxItem.content

Wpf 将网格设置为ListBoxItem.content,wpf,listbox,listboxitem,Wpf,Listbox,Listboxitem,我正在尝试创建一个网格,并将其设置为ListBoxItem的内容。出于性能原因,我在ListBox类的PrepareContainerForItemOverride()方法中使用C#in执行此操作 protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, obje

我正在尝试创建一个网格,并将其设置为
ListBoxItem
的内容。出于性能原因,我在
ListBox
类的
PrepareContainerForItemOverride()
方法中使用C#in执行此操作

protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
    base.PrepareContainerForItemOverride(element, object);
    Grid grid = new Grid();
    ... adding stuff to the grid ...
    ListBoxItem lbItem = element as ListBoxItem;
    lbItem.Content = grid;
}

我可以为内容设置一些字符串,但不能设置网格。

您可以将网格设置为内容,也许您就是看不到

因为这样做很好:

 public MainWindow()
        {
            InitializeComponent();

            var grid = new Grid();
            grid.Children.Add(new TextBox { Text = "Test" });
            var lbItem = new ListBoxItem();
            lbItem.Content = grid;

            _myListBox.Items.Add(lbItem);
        }

我会使用项目的ContentTemplate。 您可以在xaml中进行设置,这样会更干净

lbItem.Content = grid;
lbItem.ContentTemplate = null; // Added one line to set ContentTemplate to null

即使xaml中没有ContentTemplate定义,也必须这样做。ListBox有一些默认的内容模板会把它搞乱。

如果我们有较少的项目,我会使用它,但在这种情况下,这是最快的。你会向网格中添加什么样的“东西”?一些图像。网格在其他情况下工作,只是不在ListBox.PrepareContainerForItemOverride()的上下文中