ItemsControl.ItemContainerStyle 属性

定义

获取或设置 Style,它应用于为每个项生成的容器元素。Gets or sets the Style that is applied to the container element generated for each item.

public:
 property System::Windows::Style ^ ItemContainerStyle { System::Windows::Style ^ get(); void set(System::Windows::Style ^ value); };
[System.ComponentModel.Bindable(true)]
public System.Windows.Style ItemContainerStyle { get; set; }
member this.ItemContainerStyle : System.Windows.Style with get, set
Public Property ItemContainerStyle As Style

属性值

Style,它应用于为每个项生成的容器元素。The Style that is applied to the container element generated for each item. 默认值为 nullThe default is null.

属性

示例

下面的示例演示如何使用此属性。The following example demonstrates how to use this property. 请考虑下面的数据绑定ListBoxConsider the following data-bound ListBox:

<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
         Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>

若要为包含数据项的元素创建样式,请创建ListBoxItem样式,如以下示例中所示。To create a style for the elements that contain the data items, create a ListBoxItem style, as shown in the following example. 样式应用于在其中定义ListBoxItem样式的范围内的所有元素。The style is applied to all ListBoxItem elements within the scope the style is defined in.

<Style TargetType="ListBoxItem">
  <Setter Property="Opacity" Value="0.5" />
  <Setter Property="MaxHeight" Value="75" />
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Trigger.Setters>
        <Setter Property="Opacity" Value="1.0" />
      </Trigger.Setters>
    </Trigger>
    <EventTrigger RoutedEvent="Mouse.MouseEnter">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation
              Duration="0:0:0.2"
              Storyboard.TargetProperty="MaxHeight"
              To="90"  />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
    <EventTrigger RoutedEvent="Mouse.MouseLeave">
      <EventTrigger.Actions>
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation
              Duration="0:0:1"
              Storyboard.TargetProperty="MaxHeight"  />
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
  </Style.Triggers>
</Style>

ListBoxItemListBox控件的容器元素。The ListBoxItem is the container element for the ListBox control. 因此,上述一种替代方法是将的ItemContainerStyle ListBox属性设置为定义的样式。Therefore, an alternative to the preceding is to set the ItemContainerStyle property of the ListBox to the defined style. 为此,请将ListBoxItem x:Key样式命名为,以便它可用作资源:To do that, give the ListBoxItem style an x:Key so it is available as a resource:

<Style TargetType="ListBoxItem" x:Key="ContainerStyle">
  <Setter Property="Opacity" Value="0.5" />
  <Setter Property="Opacity" Value="0.5" />
  <Setter Property="MaxHeight" Value="75" />
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Opacity" Value="1.0" />
    </Trigger>

接下来,将ItemContainerStyle属性设置为资源,如以下示例中所示:Next, set the ItemContainerStyle property to the resource, as in the following example:

<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
         ItemContainerStyle="{StaticResource ContainerStyle}" 
         Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>

上述两个方案都生成相同的结果。Both of the preceding scenarios produce the same result. 不过,使样式作为资源提供的优点之一是可以重复使用样式。However, one of the advantages of making the style available as a resource is that you can reuse the style. 显式设置ItemContainerStyle属性还能提供更好的可读性。Setting the ItemContainerStyle property explicitly can also provide greater readability.

有关完整示例,请参阅样式设置和模板化示例简介For the complete example, see Introduction to Styling and Templating Sample.

下面的示例旨在说明由ItemsControl提供的不同样式和模板相关属性的功能。The following example is designed to illustrate the function of the different styling and templating related properties provided by the ItemsControl. ItemsControl此示例中,绑定到Task对象的集合。The ItemsControl in this example is bound to a collection of Task objects. 为便于演示,本示例中的样式和模板都进行了内联声明。For demonstration purposes, the styles and templates in this example are all declared inline.

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

下面是该示例在呈现时的屏幕快照:The following is a screenshot of the example when it is rendered:

System.windows.controls.itemscontrol> 示例屏幕快照ItemsControl example screenshot

此处未显示的的ItemsControl两个其他样式相关的属性为GroupStyleGroupStyleSelectorTwo other style-related properties of the ItemsControl that are not shown here are GroupStyle and GroupStyleSelector.

注解

使用此属性或ItemContainerStyleSelector属性可以设置样式,以影响包含数据项的元素的外观。You use this property or the ItemContainerStyleSelector property to set a style to affect the appearance of the elements that contain the data items. 例如,对于ListBox,生成的容器是ListBoxItem控件; 对于ComboBox,它们是ComboBoxItem控件。For example, for ListBox, the generated containers are ListBoxItem controls; for ComboBox, they are ComboBoxItem controls.

为视觉对象自定义提供了极大的灵活性,并提供了许多样式设置和模板化属性。ItemsControlThe ItemsControl provides great flexibility for visual customization and provides many styling and templating properties. 若要影响项的布局,请使用ItemsPanel属性。To affect the layout of the items, use the ItemsPanel property. 如果对控件使用分组,则可以使用GroupStyleGroupStyleSelector属性。If you are using grouping on your control, you can use the GroupStyle or GroupStyleSelector property. 若要指定数据对象的可视化,请使用ItemTemplateItemTemplateSelector属性。To specify the visualization of data objects, use the ItemTemplate or ItemTemplateSelector property. 有关何时指定的ItemTemplate详细信息,请参阅数据模板化概述For more information about when to specify an ItemTemplate, see Data Templating Overview.

XAML 属性用法XAML Attribute Usage

<object ItemContainerStyle="ResourceExtension StyleResourceKey"/>  

XAML 值XAML Values

ResourceExtensionResourceExtension
以下项之一: StaticResource、或。 DynamicResourceOne of the following: StaticResource, or DynamicResource. 除非样式本身包含对潜在运行时引用(如系统资源或用户首选项)的引用StaticResource ,否则通常建议对样式的引用以提高性能。Unless the styles themselves contain references to potential run-time references such as system resources or user preferences, StaticResource reference to a style is usually recommended for performance.

StyleResourceKeyStyleResourceKey
x:Key引用作为资源请求的样式的字符串值。x:Key string value referring to the style being requested as a resource.

依赖项属性信息Dependency Property Information

标识符字段Identifier field ItemContainerStyleProperty
元数据属性设置为trueMetadata properties set to true NoneNone

适用于

另请参阅