[C#] DataGrid에서 선택한 행의 색상을 설정하는 방법

DataGrid에서 선택한 행의 기본 배경색이 너무 어두워 읽을 수 없습니다. 어쨌든 재정의 할 수 있습니까?

이것을 시도

<dg:DataGrid.RowStyle>
    <Style TargetType="{x:Type dg:DataGridRow}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True" >
                <Setter Property="Background" Value="Gainsboro" />
            </Trigger>
        </Style.Triggers>
    </Style>
</dg:DataGrid.RowStyle>

그러나 여전히 아무것도 …



답변

위의 솔루션은 필자의 경우 각 셀 주위에 파란색 테두리를 남겼습니다.

이것은 나를 위해 일한 솔루션입니다. 매우 간단합니다 DataGrid.에 추가하십시오 . a SolidColorBrush에서 선형 그라디언트와 같은 다른 브러시로 변경할 수 있습니다 .

<DataGrid.Resources>
  <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                   Color="#FF0000"/>
</DataGrid.Resources>


답변

알았다. DataGrid.Resources 섹션에 다음을 추가하십시오.

  <DataGrid.Resources>
     <Style TargetType="{x:Type dg:DataGridCell}">
        <Style.Triggers>
            <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
                <Setter Property="Background" Value="#CCDAFF" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>


답변

@Seb Kade의 답변에 대한 확장으로 다음을 사용하여 선택 및 선택되지 않은 행의 색상을 완전히 제어 할 수 있습니다 Style.

<Style TargetType="{x:Type DataGridRow}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
    </Style.Resources>
</Style>

물론 원하는 색상을 입력 할 수 있습니다. 이는 s Style와 같은 다른 수집 항목에도 적용됩니다 ListBoxItem( 예를 들어 교체 TargetType="{x:Type DataGridRow}"하는 TargetType="{x:Type ListBoxItem}"경우).


답변

나는이 문제가 있었고 머리카락이 거의 찢어졌고 그물에서 적절한 대답을 찾을 수 없었습니다. WPF DataGrid에서 선택한 행의 배경색을 제어하려고했습니다. 그냥하지 않을 것입니다. 필자의 경우 데이터 그리드에 CellStyle이 있고 CellStyle이 내가 설정 한 RowStyle을 대체했기 때문입니다. 흥미롭게도 CellStyle은 배경색을 설정하지 않았기 때문에 RowBackground 및 AlternateRowBackground 속성에 의해 빙 설정되었습니다. 그럼에도 불구하고 선택한 행의 배경색을 설정하려고 시도해도 전혀 작동하지 않았습니다.

        <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
            </Style>
        </DataGrid.CellStyle>

선택한 행의 원하는 스타일을 행 스타일에서 셀 스타일로 옮길 때 작동했습니다.

    <DataGrid ... >
        <DataGrid.RowBackground>
            ...
        </DataGrid.RowBackground>
        <DataGrid.AlternatingRowBackground>
            ...
        </DataGrid.AlternatingRowBackground>
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Foreground" Value="{Binding MyProperty}" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Pink"/>
                        <Setter Property="Foreground" Value="White"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.CellStyle>

누군가 같은 문제가있는 경우에 대비하여 게시하십시오.


답변

기본 IsSelected 트리거는 Background, Foreground & BorderBrush의 3 가지 속성을 변경합니다. 배경뿐만 아니라 테두리를 변경하려면 스타일 트리거에 포함하십시오.

<Style TargetType="{x:Type dg:DataGridCell}">
    <Style.Triggers>
        <Trigger Property="dg:DataGridCell.IsSelected" Value="True">
            <Setter Property="Background" Value="#CCDAFF" />
            <Setter Property="BorderBrush" Value="Black" />
        </Trigger>
    </Style.Triggers>
</Style>


답변

행 선택 이벤트가 작동하지 않는 이유 중 일부가 작동하지 않습니다.

  1. DataGridCell에 대한 스타일 설정
  2. 템플릿 열 사용
  3. 트리거는 DataGridRow에서 설정됩니다.

이것이 나를 도왔습니다. DataGridCell의 스타일 설정

<Style TargetType="{x:Type DataGridCell}">
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Background" Value="Green"/>
      <Setter Property="Foreground" Value="White"/>
    </Trigger>
  </Style.Triggers>
</Style>

그리고 내부에 레이블이있는 템플릿 열을 사용했기 때문에 RelativeSource 바인딩을 사용하여 Foreground 속성을 컨테이너 Foreground에 바인딩했습니다.

<DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Label Content="{Binding CategoryName,
                 Mode=TwoWay,
                 UpdateSourceTrigger=LostFocus}"
             Foreground="{Binding Foreground,
                 RelativeSource={RelativeSource Mode=FindAncestor,
                     AncestorLevel=1,
                     AncestorType={x:Type DataGridCell}}}"
             Width="150"/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>


답변

ControlBrushKey를 시도했지만 선택하지 않은 행에서는 작동하지 않습니다. 선택되지 않은 행의 배경은 여전히 ​​흰색입니다. 그러나 행 스타일을 재정의해야한다는 것을 알았습니다.

<DataGrid x:Name="pbSelectionDataGrid" Height="201" Margin="10,0"
          FontSize="20" SelectionMode="Single" FontWeight="Bold">
    <DataGrid.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFDD47C"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFA6E09C"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Red"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Violet"/>
    </DataGrid.Resources>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="Background" Value="LightBlue" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>