Когда игнорировать этот ответ
Пожалуйста, игнорируйте этот ответ в пользу сообщения от DevExpress, если вы хотите, чтобы все строки сетки были одинакового цвета (кроме выбранной строки).
Если вы хотите динамически окрашивать строки сетки на основе некоторой переменной в ViewModel за каждой строкой, тогда этот ответ - хорошее начало.
В двух словах
- Добавить новый стиль в сетку.
- Новый стиль заменяет цвет по умолчанию для строки.
- В новом стиле есть DataTrigger, который по-разному окрашивает подсвеченную строку при ее выборе (путем мониторинга
SelectionState
).
Это просто, как только шаблон добавлен ...
Не откладывайтесь на объем кода. После того, как вы добавите плиту котла, будет применена новая цветовая схема, добавив ее к любой сетке в вашем проекте:
RowStyle="{StaticResource CustomRowStyle}"
XAML
Добавить этот стиль:
<Style x:Key="CustomRowStyle" TargetType="{x:Type grid:GridRowContent}" BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}">
<Setter Property="Foreground" Value="{StaticResource DoneForegroundBrush}" />
<Setter Property="Background" Value="{StaticResource DoneBackgroundBrush}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectionState, Converter={StaticResource TrueIfSelectedOrFocused}}" Value="True">
<Setter Property="Foreground" Value="{StaticResource SelectedForegroundBrush}" />
<Setter Property="Background" Value="{StaticResource SelectedDoneBackgroundBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
Добавьте эти цвета:
<SolidColorBrush x:Key="DoneForegroundBrush" Color="#FF00D000"></SolidColorBrush>
<SolidColorBrush x:Key="DoneBackgroundBrush" Color="#20263900"></SolidColorBrush>
<SolidColorBrush x:Key="SelectedForegroundBrush" Color="White"></SolidColorBrush>
<SolidColorBrush x:Key="SelectedDoneBackgroundBrush" Color="DarkGreen" Opacity="0.5"></SolidColorBrush>
Затем прикрепите этот стиль к вашей сетке, используя свойство RowStyle
:
<grid:GridControl
ItemsSource="{Binding Items}"
SelectedItem="{Binding ItemSelected, Mode=TwoWay}"
AutoGenerateColumns="None"
SelectionMode="Row">
<grid:GridControl.View>
<grid:TableView VerticalScrollbarVisibility="Auto"
AutoWidth="True"
NavigationStyle="Row"
DetailHeaderContent="Orders"
ShowGroupPanel="False"
ShowColumnHeaders="True"
FadeSelectionOnLostFocus="False"
ShowIndicator="False"
UseLightweightTemplates="None"
RowStyle="{StaticResource CustomRowStyle}">
</grid:TableView>
</grid:GridControl.View>
<grid:GridControl.Columns>
<!-- Column definitions here. -->
</grid:GridControl.Columns>
</grid:GridControl>
C #
Наконец, используйте этот конвертер, который необходим, чтобы по-разному раскрасить строку, если она выделена или сфокусирована:
namespace Converters
{
public class TrueIfSelectedOrFocused : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
switch ((SelectionState)value)
{
case SelectionState.Selected:
case SelectionState.Focused:
case SelectionState.FocusedAndSelected:
return true;
case SelectionState.None:
return false;
default:
return false;
}
}
catch (Exception ex)
{
// Log error here.
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
#endregion
}
}
Чтобы подключить этот преобразователь, нам нужно добавить стандартный код котельной плиты:
<converters:TrueIfSelectedOrFocused x:Key="TrueIfSelectedOrFocused" />
и в шапке:
xmlns:converters="clr-namespace:Converters"