비활성 상태 일 때 DataGrid의 선택된 행 색상
DataGrid가 포커스를 잃었을 때 선택한 행의 색상을 변경하도록 WPF DataGrid의 스타일을 어떻게 지정할 수 있습니까?
오랜 시간 동안 검색 한 후, 앞서 게시 한 Got / LostFocus 접근 방식보다 더 깔끔한 놀랍도록 간단한 방법을 찾았습니다.
<DataGrid.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/>
</DataGrid.Resources>
이렇게하면 비활성 배경색이 DarkGray로 설정되고 활성 배경색은 기본값으로 유지되지만 SystemColors.HighlightBrushKey를 사용하여이를 변경할 수도 있습니다.
비활성 선택을위한 포 그라운드 리소스 키는 SystemColors.InactiveSelectionHighlightTextBrushKey입니다.
4.0에서 작동하는 완벽한 솔루션입니다. 이것은 CellStyle에 있습니다.
<DataGrid.CellStyle>
<!--Override Highlighting so that its easy to see what is selected even when the control is not focused-->
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
다음과 같이하십시오.
<DataGrid ...>
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
</Style.Resources>
</Style>
</DataGrid.Resources>
...
이 답변 중 어느 것도 내가 찾고 있던 것을 제공하지 못했습니다. Steve Streeting의 최고 평점은 변경하고 싶지 않은 데이터 그리드의 다른 섹션을 변경했으며 다른 답변은 비활성 색상 변경을 제공하지 않았지만 행만 올바르게 타겟팅했습니다. 그래서 여기 에 그리드의 다른 위치가 아닌 행 에서만 비활성 색상 을 변경하는 답변의 혼합 이 있습니다.
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="DarkGray"/>
</Style.Resources>
</Style>
</DataGrid.Resources>
.Net Framework 4.0 (또는 InactiveSelection ... 브러시 키를 사용하지 않으려는 경우) : DataGridRow 스타일 / 컨트롤 템플릿을 만들고 다음 트리거를 추가합니다.
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="{DynamicResource SelectionBrush}" />
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=IsKeyboardFocusWithin}" Value="False" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="Background" Value="{DynamicResource InactiveSelectionBrush}" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</ControlTemplate.Triggers>
.net Framework 4.0의 경우
<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="DarkGray" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="White"/>
</Style.Resources>
</Style>
최신 답변 :
This works in .Net 4.0, and you don't have to hardcode the color:
<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="{x:Static SystemColors.HighlightTextColor}"/>
</Style.Resources>
</Style>
You should define section "DataGrid.CellStyle" inside your DataGrid like this:
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
Find an answer by myself.
Add to DataGrid's resources the brush, which can change its 'Color' property from code behind, and reference HighlightBrushKey to it:
<DataGrid.Resources>
<SolidColorBrush x:Key="SelectionColorKey" Color="DarkGray"/>
<Style TargetType="DataGridRow">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={StaticResource SelectionColorKey}, Path=Color}"/>
</Style.Resources>
</Style>
</DataGrid.Resources>
Then add DataGrids event handlers to manually change the color:
private void DataGrid1_LostFocus(object sender, RoutedEventArgs e)
{
((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray;
}
private void DataGrid1_GotFocus(object sender, RoutedEventArgs e)
{
((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = SystemColors.HighlightColor;
}
private void DataGrid1_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
((SolidColorBrush)DataGrid1.Resources["SelectionColorKey"]).Color = Colors.DarkGray;
}
I added this to my ResourceDictionary so that it applies to all data grids in my program.
<Style TargetType="DataGrid">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="LightGray"/>
</Style.Resources>
</Style>
참고URL : https://stackoverflow.com/questions/7998112/datagrids-selected-row-color-when-inactive
'code' 카테고리의 다른 글
Django 양식, 상속 및 양식 필드 순서 (0) | 2020.11.23 |
---|---|
국가 코드 / 이름의 CSV 목록? (0) | 2020.11.23 |
다른 브랜치의 특정 커밋에서 브랜치를 만드는 방법 (0) | 2020.11.23 |
앱을 더욱 전문적으로 만드는 특징 / 기능? (0) | 2020.11.22 |
C / C ++ 컴파일러 경고 : 모든 코드를 정리하여 제거하거나 그대로 두십니까? (0) | 2020.11.22 |