Настройка цвета текста в XAML для каждой строки - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь добавить проверку в сетку данных в XAML.

В настоящее время я создал метод, который проверяет 3 текстовых поля на правильность ввода, и если false устанавливает значение в коллекции, с которой связана сетка данных, либо в true, либо в false. Эта часть отлично работает.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, чтобы заставить это реально работать.

Я создал конвертер:

 public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
     bool isRowValid = ((bool)value);

     ConsoleColor validColour = ConsoleColor.Green;
     ConsoleColor invalidColour = ConsoleColor.Red;

     if (isRowValid)
     {
        return validColour;
     }
     else
     {
        return invalidColour;
     }
  }

Поэтому, когда строка недействительна, она будет отображаться красным цветом, а когда она действительна, она будет отображаться зеленым цветом.

Метод проверки каждой строки вызывается, когда строка теряет фокус, и по умолчанию для каждой строки устанавливается недопустимое значение.

Я пытался установить фон для каждой строки, выполнив

<DataGrid.RowBackground>
    <SolidColorBrush Color="{Binding Path=IsRowValid, Converter={StaticResource RowValidConverter}}" />
</DataGrid.RowBackground>

но в идеале я бы хотел, чтобы это настраивало только цвет текста, а не фон.

Буду очень признателен за любые предложения о том, как это осуществить,

Спасибо.

1 Ответ

2 голосов
/ 22 февраля 2011

Если я правильно понимаю вашу проблему, то я думаю, что более простой подход - добавить триггер для Validation.HasError в RowStyle

<DataGrid ...>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="TextElement.Foreground" Value="Green"/>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="TextElement.Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <!--...-->
</DataGrid>

или если вы управляете этим другим способом с помощью свойства, называемогоIsRowValid в вашей ViewModel, тогда вы можете просто изменить триггер на DataTrigger

<DataTrigger Binding="{Binding IsRowValid}" Value="True">
    <Setter Property="TextElement.Foreground" Value="Red"/>
</DataTrigger>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...