本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

ItemsControl.ItemsPanel 属性

 

获取或设置模板,它定义了控制项的布局的面板。

命名空间:   System.Windows.Controls
程序集:  PresentationFramework(PresentationFramework.dll 中)

[BindableAttribute(false)]
public ItemsPanelTemplate ItemsPanel { get; set; }

属性值

Type: System.Windows.Controls.ItemsPanelTemplate

一个 ItemsPanelTemplate,它定义了用于项的布局的面板。 ItemsControl 的默认值是一个指定 StackPanelItemsPanelTemplate

对于 ListBox,默认 ItemsPanelTemplate 指定了 VirtualizingStackPanel对于 MenuItem,默认值使用 WrapPanel对于 StatusBar,默认值使用 DockPanel

若要影响 ItemsControl 中项的布局,可以使用此属性来指定一个 ItemsPanelTemplate

ItemsControl 为可视化自定义提供了很大灵活性,并提供了许多样式和模板属性。您可以使用 ItemContainerStyle 属性或 ItemContainerStyleSelector 属性来设置样式,以影响包含数据项的元素的外观。例如,对于 ListBox,生成的容器是 ListBoxItem 控件;对于 ComboBox,它们是 ComboBoxItem 控件。如果在控件上使用分组,可以使用 GroupStyleGroupStyleSelector 属性。若要指定数据对象的可视化,请使用 ItemTemplateItemTemplateSelector 属性。有关详细信息,请参阅数据模板化概述

标识符字段

ItemsPanelProperty

设置为 true 的元数据属性

若要创建水平 ListBox,可以创建一个指定水平 StackPanel 的模板并将其设置为 ItemsPanel 属性。下面的示例演示创建水平 ListBoxListBoxStyle

<Style TargetType="ListBox">
  <Setter Property="ItemsPanel">
    <Setter.Value>
      <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Center"/>
      </ItemsPanelTemplate>
    </Setter.Value>
  </Setter>
</Style>

下面的示例使用 ControlTemplate 来创建具有圆角的水平 ListBox在此示例中,没有像前一个示例那样设置 ItemsPanel 属性,而是在 ControlTemplate 内指定了水平 StackPanel StackPanel 上的 IsItemsHost 属性设置为 true,表明生成的项应位于该面板中。以此方式指定时,如果不使用 ControlTemplate,控件的用户将无法替换 ItemsPanel因此,仅当您确信不希望在不使用模板的情况下替换面板时,才应如此操作。

<Style TargetType="ListBox">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBox">
        <Border CornerRadius="5" Background="{TemplateBinding ListBox.Background}">
          <ScrollViewer HorizontalScrollBarVisibility="Auto">
            <StackPanel Orientation="Horizontal"
                       VerticalAlignment="Center"
                       HorizontalAlignment="Center"
                       IsItemsHost="True"/>
          </ScrollViewer>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

或者,您也可以执行以下操作来获得相同的结果。在本例中,ItemsPresenter 基于 ItemsPanelTemplate 的指定,为项的布局创建面板。

<Style TargetType="{x:Type ListBox}">
  <Setter Property="ItemsPanel">
    <Setter.Value>
      <ItemsPanelTemplate>
        <StackPanel Orientation="Horizontal"
                     VerticalAlignment="Center"
                     HorizontalAlignment="Center"/>
      </ItemsPanelTemplate>
    </Setter.Value>
  </Setter>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBox}">
        <Border CornerRadius="5"
                Background="{TemplateBinding ListBox.Background}">
          <ScrollViewer HorizontalScrollBarVisibility="Auto">
            <ItemsPresenter/>
          </ScrollViewer>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

.NET Framework
3.0 后可用
Silverlight
2.0 后可用
Windows Phone Silverlight
7.0 后可用
返回页首
显示: