Как установить цвет выбранной строки в DataGrid
Кажется, это не проблема, но я просто не понимаю, как это сделать.
Цвет фона по умолчанию для выбранной строки в 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>
Но все равно ничего...
Ответы
Ответ 1
Получил это. Добавьте в раздел 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
Вышеупомянутое решение оставило синюю рамку вокруг каждой ячейки в моем случае.
Это решение, которое сработало для меня. Это очень просто, просто добавьте это в свой DataGrid
. Вы можете изменить его с SolidColorBrush
на любую другую кисть, такую как линейный градиент.
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="#FF0000"/>
</DataGrid.Resources>
Ответ 3
В качестве расширения для ответа @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
(если вы замените TargetType="{x:Type DataGridRow}"
на TargetType="{x:Type ListBoxItem}"
).
Ответ 4
У меня была эта проблема, и я чуть не сорвал волосы, и я не смог найти подходящий ответ в сети. Я пытался контролировать цвет фона выбранной строки в WPF DataGrid. Это просто не получится. В моем случае причина заключалась в том, что у меня также был CellStyle в моем datagrid, и CellStyle переопределил RowStyle, который я устанавливал. Интересно, потому что CellStyle даже не установил цвет фона, который вместо этого был установлен с помощью свойств RowBackground и AlternateRowBackground. Тем не менее, попытка установить цвет фона выбранной строки не срабатывала, когда я это сделал:
<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>
Просто опубликуйте это, если у кого-то такая же проблема.
Ответ 5
Триггер IsSelected по умолчанию изменяет 3 свойства, Background, Foreground и 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>
Ответ 6
Некоторая причина, по которой я испытал не выбранное событие, не работает
- Стиль настроен для DataGridCell
- Использование шаблонов с шаблонами
- Триггер настроен на DataGridRow
Это помогло мне. Установка стиля для DataGridCell
<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>
И так как я использовал столбец шаблона с меткой внутри, я привязал свойство Foreground к контейнеру Foreground с использованием привязки RelativeSource:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding CategoryName,
Mode=TwoWay,
UpdateSourceTrigger=LostFocus}"
Foreground="{Binding Foreground,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorLevel=1,
AncestorType={x:Type DataGridCell}}}"
Width="150"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Ответ 7
Я пробовал ControlBrushKey, но он не работал для невыбранных строк. Фон для невыделенной строки все еще белый. Но мне удалось выяснить, что мне нужно переопределить стиль строки.
<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>