如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)
Posted
技术标签:
【中文标题】如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)【英文标题】:How do I change text color on the selected row inside a ListView/GridView? (using Expression Dark theme) 【发布时间】:2011-02-24 18:42:12 【问题描述】:我正在使用带有 ListView(视图属性设置为 GridView)的 Expression Dark WPF 主题(http://wpfthemes.codeplex.com/)来显示一些用户数据,如下所示:
<ListView
Grid.Row="1"
ItemsSource="Binding RegisteredUsers"
SelectedItem="Binding SelectedUser"
>
<ListView.View>
<GridView>
<GridViewColumn
Header="Login"
DisplayMemberBinding="Binding Login"
Width="60"/>
<GridViewColumn
Header="Full Name"
DisplayMemberBinding="Binding FullName"
Width="180"/>
<GridViewColumn
Header="Last logon"
DisplayMemberBinding="Binding LastLogon"
Width="120"/>
<GridViewColumn
Header="Photo"
Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image
Source="Binding Photo"
Width="30"
Height="35"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
这些行在选择时具有带有深色背景和白色背景的白色文本,但是在选择时文本颜色不会改变并且很难阅读,我希望在选择行时文本具有深色。我已经搜索了一种设置文本颜色样式的方法,但没有成功,这是 ListViewItem 的控件模板:
<Border SnapsToDevicePixels="true" BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness" CornerRadius="2" x:Name="border">
<Grid Margin="2,0,2,0">
<Rectangle x:Name="Background" IsHitTestVisible="False" Opacity="0.25" Fill="StaticResource NormalBrush" RadiusX="1" RadiusY="1"/>
<Rectangle x:Name="HoverRectangle" IsHitTestVisible="False" Opacity="0" Fill="StaticResource NormalBrush" RadiusX="1" RadiusY="1"/>
<Rectangle x:Name="SelectedRectangle" IsHitTestVisible="False" Opacity="0" Fill="StaticResource SelectedBackgroundBrush" RadiusX="1" RadiusY="1"/>
<GridViewRowPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels" Margin="0,2,0,2" VerticalAlignment="Stretch" />
</Grid>
</Border>
更改背景颜色的触发器只是应用动画来更改“SelectedRectangle”不透明度,但我无法更改同一触发器上的文本颜色(我尝试在 ListViewItem 上使用设置器设置前景色,但没有成功)。
有人知道吗?
【问题讨论】:
【参考方案1】:通过在 GridViewRowPresenter 范围上应用文本块样式来解决:
<GridViewRowPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels" Margin="0,2,0,2" VerticalAlignment="Stretch" >
<GridViewRowPresenter.Resources>
<Style
TargetType="x:Type TextBlock"
BasedOn="StaticResource x:Type TextBlock"
>
<Style.Triggers>
<DataTrigger
Binding="Binding Path=IsSelected, RelativeSource=RelativeSource AncestorType=x:Type ListViewItem"
Value="True">
<Setter
Property="Foreground"
Value="Black"
/>
</DataTrigger>
</Style.Triggers>
</Style>
</GridViewRowPresenter.Resources>
</GridViewRowPresenter>
【讨论】:
【参考方案2】:尝试更改 TextBlock.Foreground
<GridViewRowPresenter TextBlock.Foreground="TemplateBinding Foreground"/>
【讨论】:
以上是关于如何更改 ListView/GridView 中选定行的文本颜色? (使用 Expression Dark 主题)的主要内容,如果未能解决你的问题,请参考以下文章
android listview里面能嵌套gridview吗