本文件已封存並已停止維護。

ItemsControl 類別

更新: 2008 年 7 月

表示可用來呈現項目集合的控制項。

命名空間:  System.Windows.Controls
組件:  PresentationFramework (在 PresentationFramework.dll 中)
針對 XAML 的 XMLNS: http://schemas.microsoft.com/winfx/xaml/presentation

[ContentPropertyAttribute("Items")]
[LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable)]
[StyleTypedPropertyAttribute(Property = "ItemContainerStyle", StyleTargetType = typeof(FrameworkElement))]
public class ItemsControl : Control, 
	IAddChild
/** @attribute ContentPropertyAttribute("Items") */
/** @attribute LocalizabilityAttribute(LocalizationCategory.None, Readability = Readability.Unreadable) */
/** @attribute StyleTypedPropertyAttribute(Property = "ItemContainerStyle", StyleTargetType = FrameworkElement) */
public class ItemsControl extends Control implements IAddChild
public class ItemsControl extends Control implements IAddChild
<ItemsControl>
  Items
</ItemsControl>

內容模型:將子系加入 ItemsControl 物件以隱含方式將其加入 ItemsControl 物件的 ItemCollection。如需 ItemsControl 內容模型的詳細資訊,請參閱 Controls 內容模型概觀

請注意,您要使用 ItemsItemsSource 屬性來指定要用於產生 ItemsControl 之內容的集合。當 ItemsSource 屬性設定時,會將 Items 集合設為唯讀和固定大小。這表示您不能直接將項目加入集合中。

ItemsSource 正在使用中,將屬性設為 null 會移除集合,且會將用法還原為 Items,這將會是空的 ItemCollection

每個 ItemsControl 型別都有對應的容器型別。容器項目就是項目集合中包含資料項目的物件。例如,對於 ListBox,產生的容器是 ListBoxItem 控制項,而對於 ComboBox,則是 ComboBoxItem 控制項。

ItemsControl 會透過 IItemContainerGenerator 介面產生其項目。ItemsControlItemContainerGenerator 屬性為型別 ItemContainerGenerator,該型別會實作 IItemContainerGenerator 介面。因此,您可以使用 ItemContainerGenerator 屬性來存取與 ItemsControl 關聯的 ItemContainerGenerator 物件。例如,若您有資料繫結的 TreeView,而想依據其索引或關聯資料項目來取得 TreeViewItem,則可使用 ItemContainerGenerator.ContainerFromIndexItemContainerGenerator.ContainerFromItem 方法。或者,您可以使用 ItemContainerGenerator.IndexFromContainerItemContainerGenerator.ItemFromContainer 方法來取得與指定產生之容器項目關聯的索引或資料項目。

除了上述用法之外,IItemContainerGenerator 介面也可用在進階案例中。一般來說,本身已實作虛擬化面板的進階應用程式,會呼叫該介面的成員。

下列範例是用來說明 ItemsControl 所提供之不同樣式及樣板相關屬性的功能。此範例中的 ItemsControl 會繫結至 Task 物件的集合。為做為示範,此範例中的樣式及樣板全都宣告為內嵌。

<ItemsControl Margin="10"
              ItemsSource="{Binding Source={StaticResource myTodoList}}">
  <!--The ItemsControl has no default visual appearance.
      Use the Template property to specify a ControlTemplate to define
      the appearance of an ItemsControl. The ItemsPresenter uses the specified
      ItemsPanelTemplate (see below) to layout the items. If an
      ItemsPanelTemplate is not specified, the default is used. (For ItemsControl,
      the default is an ItemsPanelTemplate that specifies a StackPanel.-->
  <ItemsControl.Template>
    <ControlTemplate TargetType="ItemsControl">
      <Border BorderBrush="Aqua" BorderThickness="1" CornerRadius="15">
        <ItemsPresenter/>
      </Border>
    </ControlTemplate>
  </ItemsControl.Template>
  <!--Use the ItemsPanel property to specify an ItemsPanelTemplate
      that defines the panel that is used to hold the generated items.
      In other words, use this property if you want to affect
      how the items are laid out.-->
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <!--Use the ItemTemplate to set a DataTemplate to define
      the visualization of the data objects. This DataTemplate
      specifies that each data object appears with the Proriity
      and TaskName on top of a silver ellipse.-->
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <DataTemplate.Resources>
        <Style TargetType="TextBlock">
          <Setter Property="FontSize" Value="18"/>
          <Setter Property="HorizontalAlignment" Value="Center"/>
        </Style>
      </DataTemplate.Resources>
      <Grid>
        <Ellipse Fill="Silver"/>
        <StackPanel>
          <TextBlock Margin="3,3,3,0"
                     Text="{Binding Path=Priority}"/>
          <TextBlock Margin="3,0,3,7"
                     Text="{Binding Path=TaskName}"/>
        </StackPanel>
      </Grid>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
  <!--Use the ItemContainerStyle property to specify the appearance
      of the element that contains the data. This ItemContainerStyle
      gives each item container a margin and a width. There is also
      a trigger that sets a tooltip that shows the description of
      the data object when the mouse hovers over the item container.-->
  <ItemsControl.ItemContainerStyle>
    <Style>
      <Setter Property="Control.Width" Value="100"/>
      <Setter Property="Control.Margin" Value="5"/>
      <Style.Triggers>
        <Trigger Property="Control.IsMouseOver" Value="True">
          <Setter Property="Control.ToolTip"
                  Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                          Path=Content.Description}"/>
        </Trigger>
      </Style.Triggers>
    </Style>
  </ItemsControl.ItemContainerStyle>
</ItemsControl>


以下是該範例呈現時的螢幕擷取畫面:

ItemsControl 範例螢幕擷取畫面

ItemsControl 還有兩個與樣式相關的屬性沒有在這裡顯示,即 GroupStyleGroupStyleSelector

System.Object
  System.Windows.Threading.DispatcherObject
    System.Windows.DependencyObject
      System.Windows.Media.Visual
        System.Windows.UIElement
          System.Windows.FrameworkElement
            System.Windows.Controls.Control
              System.Windows.Controls.ItemsControl
                System.Windows.Controls.HeaderedItemsControl
                System.Windows.Controls.Primitives.MenuBase
                System.Windows.Controls.Primitives.Selector
                System.Windows.Controls.Primitives.StatusBar
                System.Windows.Controls.TreeView

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

Windows Vista

.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求

.NET Framework

支援版本:3.5、3.0

日期

記錄

原因

2008 年 7 月

加入新成員:AlternationCount 屬性、AlternationIndex 屬性、ItemBindingGroup 屬性、ItemStringFormat 屬性、GetAlternationIndex 方法、OnAlternationCountChanged 方法、OnItemBindingGroupChanged 方法、OnItemStringFormatChanged 方法、AlternationCountProperty 欄位、AlternationIndexProperty 欄位、ItemBindingGroupProperty 欄位、ItemStringFormatProperty 欄位。

SP1 功能變更。

顯示: