Вопрос о стиле строки и столбца сетки данных WPF

#wpf #datagrid

#wpf #сетка данных

Вопрос:

Мне нужно выделить строку, наведенную курсором мыши на сетку данных, что, кажется, легко с этим стилем:

 <Style TargetType="DataGridRow">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="Green"/>
        </Trigger>
    </Style.Triggers>
</Style>
  

Проблема в том, что у меня также есть стиль для некоторых ячеек, доступных только для чтения, определенный как:

 <Style TargetType="DataGridCell">
    <Style.Triggers>
        <Trigger Property="IsReadOnly" Value="True">
            <Setter Property="Background" Value="LightGoldenrodYellow"/>
        </Trigger>
    </Style.Triggers>
</Style>
  

В результате эти ячейки, доступные только для чтения, не получают фона при наведении курсора мыши. Как мне решить этот конфликт? Мы высоко ценим вашу помощь.

Комментарии:

1. Стиль кодирования означает стиль, в котором написан код. Это не влияет на стиль пользовательского интерфейса. Пожалуйста, ознакомьтесь с этим разъяснением .

2. @Monster Truck: Я не понимаю, о чем вы говорите. Я сказал стиль кодирования?

3. Да, вы пометили его «в стиле кодирования». Я отредактировал ваш пост и удалил его.

Ответ №1:

Это не конфликт. Событие наведения курсора мыши предназначено для работы с обычной строкой и ячейкой, которые не доступны только для чтения.

Для решения этой проблемы следует добавить мультитриггер.

Пример:

   <MultiTrigger>
    <MultiTrigger.Conditions>
      <Condition Property="IsReadOnly" Value="true" />
      <Condition Property="IsMouseOver" Value="true" />
    </MultiTrigger.Conditions>
    <Setter Property="Background" Value="Green"/>
  </MultiTrigger>
  

Код действителен для стиля ячейки DataGrid. Завершенный пример кода будет:

 <Style TargetType="DataGridCell">    
<Style.Triggers>        
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="IsReadOnly" Value="true" />
          <Condition Property="IsMouseOver" Value="true" />
        </MultiTrigger.Conditions>
        <Setter Property="Background" Value="Green"/>
      </MultiTrigger>
</Style.Triggers>
</Style>
  

Комментарии:

1. Я только что попробовал вашу идею и получил ошибку компилятора: «Не удается найти свойство стиля ‘IsReadOnly’ в системе ‘type ‘. Windows. Элементы управления. DataGridRow’. Как решить эту проблему?

2. Я думаю, вам следует использовать приведенный выше код внутри стиля для DataGridCell. Я отредактирую и обновлю приведенный выше код.

3. Я не думаю, что включение этого триггера в DataGridCell будет работать, потому что он выделяет только текущую ячейку при наведении курсора мыши, а не всю строку.

4. Вы не можете сделать это для DataGridRow, потому что DataGridRow не имеет свойства только для чтения. Но вы можете отключить DataGridRow, установив для свойства Enabled значение false, а затем создать стиль с помощью мультитриггера, описанного выше.

5. Отключение строки отличается от доступа только для чтения. При отключении щелчок по строке не делает ее выделенной. У меня такая же проблема с ячейками сетки данных.