如何:为实现 GridView 的 ListView 中的行设置样式

此示例演示如何在使用 GridViewView 模式的 ListView 控件中设置行的样式。

示例

可以通过在 ListView 控件上设置 ItemContainerStyle 来设置 ListView 控件中的行的样式。 设置代表 ListViewItem 对象的项的样式。 ItemContainerStyle 引用用于显示行内容的 ControlTemplate 对象。

从中提取了以下示例的完整示例显示了存储在 XML 数据库中的歌曲信息的集合。 数据库中的每首歌都有一个评级字段,此字段的值指定了歌曲信息行的显示方式。

下面的示例演示了如何为表示歌曲集合中的歌曲的 ListViewItem 对象定义 ItemContainerStyleItemContainerStyle 引用了指定如何显示一行歌曲信息的 ControlTemplate 对象。

 <ListView.ItemContainerStyle>
  <Style TargetType="{x:Type ListViewItem}"  >
    <Setter Property="Template"
          Value="{StaticResource Default}"/>
    <Style.Triggers>
      <DataTrigger Binding="{Binding XPath=@Rating}" Value="5">
              <Setter Property="Template" 
              Value="{StaticResource StronglyRecommended}"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding XPath=@Rating}" Value="4">
        <Setter Property="Template" 
              Value="{StaticResource Recommended}"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
</ListView.ItemContainerStyle>

下面的示例演示了将文本字符串 "Strongly Recommended" 添加到行中的 ControlTemplate。 此模板在 ItemContainerStyle 中引用,并且在歌曲的评级值为 5(五)时显示。 ControlTemplate 包括一个 GridViewRowPresenter 对象,该对象将行的内容按 GridView 视图模式所定义的列的形式进行布局。

<ControlTemplate x:Key="StronglyRecommended" 
                 TargetType='{x:Type ListViewItem}'>
  <StackPanel Background="Beige">
    <GridViewRowPresenter Content="{TemplateBinding Content}"
       Columns="{TemplateBinding GridView.ColumnCollection}"/>
    <TextBlock Background="LightBlue" Text="Strongly Recommended" />
  </StackPanel>
</ControlTemplate>

下面的示例定义了 GridView

<ListView.View>
  <GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}">
    <GridViewColumn Header="Name" 
                    DisplayMemberBinding="{Binding XPath=@Name}" 
                    Width="100"/>
    <GridViewColumn Header="Time" 
                    DisplayMemberBinding="{Binding XPath=@Time}" 
                    Width="80"/>
    <GridViewColumn Header="Artist"  
                    DisplayMemberBinding="{Binding XPath=@Artist}" 
                    Width="80" />
    <GridViewColumn Header="Disk" 
                    DisplayMemberBinding="{Binding XPath=@Disk}"  
                    Width="100"/>
  </GridView>
</ListView.View>

另请参阅