我试图通过将字体设为粗体并将未突出显示的行着色为灰色来“突出显示”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>
再次,黄色背景看起来不错,但灰色前景不是。
那怎么办?