#c# #wpf #xaml
#c# #wpf #xaml
Вопрос:
Проблема
Используемые стили:
DataGridRow
DataGridCell
Я могу либо использовать выделение, либо заполнение ячеек, но не оба одновременно. Я пробовал много-много разных подходов (например, ресурсы и конкретные стили DataGrid), но ничего не работает и не допускает вопросов.
<UserControl.Resources>
<!-- DataGridRow style -->
<Style x:Key="MyRowStyle" TargetType="{x:Type DataGridRow}">
<Style.Resources>
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#E5BE47" />
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Blue" />
</Style.Resources>
</Style>
<!-- DataGridCell style -->
<Style x:Key="MyCellStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border x:Name="border" Padding="15,10,10,15">
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid>
<!-- BOTH styles are used, which illustrates the problem: -->
<DataGrid x:Name="Connections" AutoGenerateColumns="False"
RowStyle="{StaticResource MyRowStyle}"
CellStyle="{StaticResource MyCellStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="Process Id"/>
<DataGridTextColumn Header="Name"/>
<DataGridTextColumn Header="Application"/>
<DataGridTextColumn Header="Directory" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
Передний план корректно изменится на «красный», но фон останется белым (а не желтым, как определено #E5BE47). Кажется, что HighlightBrushKey полностью игнорируется по какой-то причине, которую я не понимаю, когда DataGridCell
также используется стиль.
Это проблема И, а не проблема ИЛИ. Как использовать оба стиля в DataGrid? Стили работают по отдельности. Проблема заключается в сочетании двух … оба не будут работать вместе — почему и как решить?
Вывод влево, желаемый вывод вправо:
Если DataGridCell
стиль удален, то цвет фона для выделения работает правильно… но это НЕ решение, поскольку оно удаляет желаемое заполнение.
Ответ №1:
Это работает
<Style x:Key="MyRowStyle" TargetType="{x:Type DataGridRow}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Blue" />
</Style.Resources>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#E5BE47 />
</Trigger>
</Style.Triggers>
</Style>
Комментарии:
1. Спасибо, что изучили это, но проблема остается: это комбинация выделения и заполнения ячеек. Когда используются оба стиля (как в моем демонстрационном коде), выделение игнорируется. Однако, если я удалю,
CellStyle="{StaticResource MyCellStyle}"
тогда выделение будет выполнено, но я не получу желаемого заполнения. Итак, существует некоторый конфликт между двумя стилями (DataGridCell и DataGridRow).2. @ChEJunkie я отредактировал свой ответ. Я добавил триггер, он работает.
3. Спасибо @dmitriy! Для всех, кто сталкивается с этим вопросом, это выглядит как разумный ресурс для получения дополнительной информации о решении: tutorialspoint.com/xaml/xaml_triggers.htm