2012-08-23 25 views
0

我试图创建网格,并将其设置为ListBoxItem的内容。由于性能原因,我在C#中使用ListBox类的PrepareContainerForItemOverride()方法。将网格设置为ListBoxItem.content

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; 
} 

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

回答

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

这必须这样做,即使是在XAML没有的ContentTemplate定义。 ListBox有一些默认的内容模板搞乱了这个。

1

您可以将网格设置为内容,也许您只是无法看到它?

因为这工作得很好:

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); 
     } 
+0

确实,我可以设置它,但不会显示 – Joonas

+0

您添加到网格中的是什么样的“材料”? – franssu

+0

几张图片。该网格工作,否则,只是不在这个上下文ListBox.PrepareContainerForItemOverride() – Joonas

0

我会使用项目的的ContentTemplate。 你可以在xaml中设置,它更清洁。

+0

我会用它,如果我们有更少的项目,但在这种情况下,这是更快 – Joonas

相关问题