如何:在实现 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>

以下示例演示了一个ControlTemplate,它将文本字符串"Strongly Recommended"添加到行中。 当歌曲评级值为 5 时,此模板在 ItemContainerStyle 中引用并显示。 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>

另请参阅