как изменить цвет выделенной строки в devexpressgrid - PullRequest
1 голос
/ 19 апреля 2011

Я новичок в сетке DevExpress.Мне нужно изменить цвет строки в сетке, когда строка выбрана.

Может кто-нибудь опубликовать код для достижения вышеуказанного сценария ..

Заранее спасибо ..

Ответы [ 2 ]

6 голосов
/ 19 апреля 2011

На вашем месте я бы изменил свойства GridView.Appearance.FocusedRow.BackColor и GridView.Appearance.SelectedRow.BackColor.Это заставит GridControl выбрать этот цвет для рисования фона выбранной строки.

0 голосов
/ 12 ноября 2015

Когда игнорировать этот ответ

Пожалуйста, игнорируйте этот ответ в пользу сообщения от 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"
...