#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. Отключение строки отличается от доступа только для чтения. При отключении щелчок по строке не делает ее выделенной. У меня такая же проблема с ячейками сетки данных.