This documentation is archived and is not being maintained.

ItemContainerGenerator Class

Generates the user interface (UI) on behalf of its host, such as an ItemsControl.

Namespace:  System.Windows.Controls
Assembly:  PresentationFramework (in PresentationFramework.dll)

public sealed class ItemContainerGenerator : IItemContainerGenerator, 
You cannot directly create an instance of this class in XAML.

ItemContainerGenerator implements IItemContainerGenerator, which is the interface that defines a type which:

  • Maintains an association between the data view of a multiple-item control, such as ContainerFromElement and the corresponding UIElement items.

  • Generates UIElement items on behalf of a multiple-item control.

Each ItemsControl type has a corresponding container type. Container elements are the objects that contain the data items in the item collection. For example, for ListBox, the generated containers are ListBoxItem controls; for ComboBox, they are ComboBoxItem controls.

The ItemsControl generates its items through the IItemContainerGenerator interface. The ItemContainerGenerator property of the ItemsControl is of type ItemContainerGenerator, which implements the IItemContainerGenerator interface. Therefore, you can access the ItemContainerGenerator object associated with your ItemsControl using the ItemContainerGenerator property. For example, if you have a data-bound TreeView, and you want to get a TreeViewItem based on its index or its associated data item, you can use the ItemContainerGenerator.ContainerFromIndex or the ItemContainerGenerator.ContainerFromItem method. Alternatively, you can use the ItemContainerGenerator.IndexFromContainer or the ItemContainerGenerator.ItemFromContainer method to get the index or data item associated with a given generated container element.

Apart from those usages, the IItemContainerGenerator interface is used in advanced scenarios. Typically, advanced applications that have their own implementation of a virtualizing panel call members of the interface.

If you need to get a specific ListBoxItem at a particular index in a ListBox, you can use an ItemContainerGenerator.

The following example shows a ListBox and its items.

<ListBox Margin="10,0,0,5" Name="lb" VerticalAlignment="Top" Grid.Column="0" Grid.Row="2">
    <ListBoxItem>Item 0</ListBoxItem>
    <ListBoxItem>Item 1</ListBoxItem>
    <ListBoxItem>Item 2</ListBoxItem>
    <ListBoxItem>Item 3</ListBoxItem>

The following example shows how to retrieve the item by specifying the index of the item in the ContainerFromIndex property of the ItemContainerGenerator.

private void GetIndex0(object sender, RoutedEventArgs e)
  ListBoxItem lbi = (ListBoxItem)
  Item.Content = "The contents of the item at index 0 are: " +
      (lbi.Content.ToString()) + ".";

After you have retrieved the list box item, you can display the contents of the item, as shown in the following example.

Item.Content = "The contents of the item at index 0 are: " +
    (lbi.Content.ToString()) + ".";


Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0