如何在 WPF 中使用 GridView 设置 ListView 一行的前景样式

问题描述 投票:0回答:0

我试图通过将字体设为粗体并将未突出显示的行着色为灰色来“突出显示”ListView(使用 GridView)的某些行。

我想知道我怎样才能做到这一点?

Microsoft 的站点确实有一篇文章 介绍如何为各个行设置样式,其中涉及设置 ItemsContainerStyle:创建内容模板,然后将行放入该模板。但是,如果您想更改背景颜色,那很好(他们的示例将行放在 Stackpanel 中并设置它的背景颜色),但没有解释如何设置行数据的字体/前景颜色的样式。

以下是文章的片段:

设置 ItemContainerStyle.

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

...这对我来说很好,但它似乎只能为行设置一种包装,所以你不能设置字体或前景的样式。

我也试过:

            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding NumberOfThings}" Value="0">
                            <Setter Property="Foreground" Value="Gray" />
                            <Setter Property="Background" Value="Yellow" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>

再次,黄色背景看起来不错,但灰色前景不是。

那怎么办?

wpf listview gridview
© www.soinside.com 2019 - 2024. All rights reserved.