这似乎不费吹灰之力,但我只是看不出怎么做。
DataGrid中所选行的默认背景颜色太深,以至于我无法读取它。无论如何都要覆盖它吗?
试过这个(从Neverminds链接修改)
<dg:DataGrid.RowStyle>
<Style TargetType="{x:Type dg:DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Gainsboro" />
</Trigger>
</Style.Triggers>
</Style>
</dg:DataGrid.RowStyle>
但仍然没有...
答案 0 :(得分:144)
在我的案例中,上述解决方案在每个单元格周围留下了蓝色边框。
这是适合我的解决方案。这很简单,只需将其添加到DataGrid
即可。您可以将其从SolidColorBrush
更改为任何其他画笔,例如线性渐变。
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="#FF0000"/>
</DataGrid.Resources>
答案 1 :(得分:92)
知道了。在DataGrid.Resources部分中添加以下内容:
<DataGrid.Resources>
<Style TargetType="{x:Type dg:DataGridCell}">
<Style.Triggers>
<Trigger Property="dg:DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#CCDAFF" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
答案 2 :(得分:68)
作为@Seb Kade答案的延伸,您可以使用以下Style
完全控制所选行和未选定行的颜色:
<Style TargetType="{x:Type DataGridRow}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
您当然可以输入您喜欢的颜色。此Style
也适用于其他收集项目,例如ListBoxItem
s(例如,如果您将TargetType="{x:Type DataGridRow}"
替换为TargetType="{x:Type ListBoxItem}"
)。
答案 3 :(得分:16)
我遇到了这个问题,我几乎把头发弄掉了,我无法在网上找到合适的答案。我试图控制WPF DataGrid中所选行的背景颜色。它只是不会这样做。在我的情况下,原因是我的数据网格中也有一个CellStyle,而CellStyle覆盖了我正在设置的RowStyle。有趣的是,因为CellStyle甚至没有设置背景颜色,而是由RowBackground和AlternateRowBackground属性设置bing。然而,当我这样做时,尝试设置所选行的背景颜色根本不起作用:
<DataGrid ... >
<DataGrid.RowBackground>
...
</DataGrid.RowBackground>
<DataGrid.AlternatingRowBackground>
...
</DataGrid.AlternatingRowBackground>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="{Binding MyProperty}" />
</Style>
</DataGrid.CellStyle>
当我将所选行的所需样式移出行样式并进入单元格样式时,它确实有效,如下所示:
<DataGrid ... >
<DataGrid.RowBackground>
...
</DataGrid.RowBackground>
<DataGrid.AlternatingRowBackground>
...
</DataGrid.AlternatingRowBackground>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="{Binding MyProperty}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Pink"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
只是发布此内容以防有人遇到同样的问题。
答案 4 :(得分:12)
默认的IsSelected触发器会更改3个属性,Background,Foreground&amp; BorderBrush。如果您想要更改边框和背景,只需在样式触发器中包含它。
<Style TargetType="{x:Type dg:DataGridCell}">
<Style.Triggers>
<Trigger Property="dg:DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="#CCDAFF" />
<Setter Property="BorderBrush" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
答案 5 :(得分:9)
我遇到行选择事件无法正常工作的部分原因
这对我有所帮助。设置DataGridCell的样式
from sqlalchemy.sql import func as sa_func
query = ItemList.query.with_entities(ItemList.itemid)
query = query.outerjoin(ItemTransactions, ItemTransactions.itemid == ItemList.itemid)
query = query.add_columns(sa_func.sum(ItemList.quantitySold).label('total_quantity_sold'))
query = query.add_columns(sa_func.max(ItemTransactions.createdAt).label('last_sale_time'))
query = query.filter(ItemList.active == "y")
query = query.group_by(ItemList.itemid)
query = query.order_by(sa_func.sum(ItemList.quantitySold).asc())
if limit is not None and limit is not 0:
query = query.limit(limit)
if offset is not None:
query = query.offset(offset)
# Execute the query
sales = query.all()
由于我使用的是带有标签的模板列,因此我使用RelativeSource绑定将Foreground属性绑定到容器Foreground:
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Green"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
答案 6 :(得分:5)
我已经尝试过ControlBrushKey,但它对未选择的行没有效果。未选择行的背景仍为白色。但是我设法发现我必须覆盖rowstyle。
<DataGrid x:Name="pbSelectionDataGrid" Height="201" Margin="10,0"
FontSize="20" SelectionMode="Single" FontWeight="Bold">
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDD47C"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFA6E09C"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Violet"/>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="LightBlue" />
</Style>
</DataGrid.RowStyle>
</DataGrid>
答案 7 :(得分:2)
我一天中大部分时间都在摆弄这个问题。原来我设置的DataGrid的RowBackground属性覆盖了所有更改它的尝试。删除后,一切正常。 (顺便说一下,DataGridTextColumn中设置的Foreground也是如此)。