如何始终显示所选行的蓝色,无论它是否具有焦点?
How to show always the blue color of a selected row, no matter if it has the focus or not?
我试图始终显示 DataGrid
行的蓝色,无论它是否具有焦点。我正在尝试这段代码:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected}" Value="true"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrushKey}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
但我得到的错误是 SystemResourcesKey 无效,只能使用 BindingBase 元素。
选中行时如何设置行的默认蓝色?
修复 SystemResourceKey
的错误:
<Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}" />
您当前的方法不起作用的原因有以下几个:
- 你指的是属性的Key,不是刷
HighlightBrush
- 您必须使用
RelativeSource
将 IsSelected
属性 绑定到 DataGridRow
本身
- 行背景被每个有自己背景的单元格遮挡
为了让它工作,用画笔替换键,调整绑定到 IsSelected
并添加一个单元格样式,将单个单元格的背景设置为所需的背景。或者,您可以将单元格背景设置为 Transparent
,这样行背景就不会被遮挡。
请注意,我还添加了 setter 来调整 Foreground
和 BorderBrush
,使其看起来与选中状态相同。但是,我建议您 不要 使用 BorderBrush
,因为边框颜色也用于验证和其他视觉状态。
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
<Setter Property="Foreground" Value="{x:Static SystemColors.HighlightTextBrush}" />
<Setter Property="BorderBrush" Value="{x:Static SystemColors.HighlightBrush}"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
如果您不关心不属于任何列的单元格的背景(占据右侧剩余的 space),则根本不需要行样式。
我试图始终显示 DataGrid
行的蓝色,无论它是否具有焦点。我正在尝试这段代码:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsSelected}" Value="true"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrushKey}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
但我得到的错误是 SystemResourcesKey 无效,只能使用 BindingBase 元素。
选中行时如何设置行的默认蓝色?
修复 SystemResourceKey
的错误:
<Setter Property="Background" Value="{StaticResource {x:Static SystemColors.HighlightBrushKey}}" />
您当前的方法不起作用的原因有以下几个:
- 你指的是属性的Key,不是刷
HighlightBrush
- 您必须使用
RelativeSource
将 - 行背景被每个有自己背景的单元格遮挡
IsSelected
属性 绑定到 DataGridRow
本身
为了让它工作,用画笔替换键,调整绑定到 IsSelected
并添加一个单元格样式,将单个单元格的背景设置为所需的背景。或者,您可以将单元格背景设置为 Transparent
,这样行背景就不会被遮挡。
请注意,我还添加了 setter 来调整 Foreground
和 BorderBrush
,使其看起来与选中状态相同。但是,我建议您 不要 使用 BorderBrush
,因为边框颜色也用于验证和其他视觉状态。
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
<Setter Property="Foreground" Value="{x:Static SystemColors.HighlightTextBrush}" />
<Setter Property="BorderBrush" Value="{x:Static SystemColors.HighlightBrush}"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
如果您不关心不属于任何列的单元格的背景(占据右侧剩余的 space),则根本不需要行样式。