wpf: DataGrid 선택한 행 스타일 사용 안 함 - 또는 행 선택
DataGrid에서 Selected 행의 스타일을 지정하는 방법에 대한 예를 많이 볼 수 있습니다. 예를 들어 다음과 같습니다.
선택한 행 스타일을 비활성화할 수 있습니까?선택한 행이 변경된 모든 항목을 재정의할 필요는 없습니다.눈에 보이는 변화를 원하지 않을 뿐입니다.템플릿을 만드는 것보다 쉬운 방법이어야 합니다.
아니면..
행을 선택하지 않도록 설정합니다.하지만 이 포럼을 검색해보니 역시 촌스러워 보입니다.
선택 스타일을 없애기 위해 XAML을 찾았습니다.이상적이지는 않지만, 충분히 가깝습니다.
<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
제가 성공한 것은 다음과 같습니다.
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="BorderBrush">
<Setter.Value>
<SolidColorBrush Color="Transparent"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground"
Value="{DynamicResource
{x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Transparent"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<!-- ... -->
</DataGrid>
저는 제 상황에 맞는 다른 방법을 찾았습니다.사용자가 셀을 선택하지 않도록 하기 위해 모든 셀에 대해 이 스타일을 설정했습니다.
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
두 번째 질문에 먼저 대답하겠습니다. 행 선택을 해제하려면 데이터 그리드의 RowStyle을 변경할 수 있습니다.
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</DataGrid.RowStyle>
<!--Other DataGrid items-->
</DataGrid>
그러나 행 자체가 "비활성화"되어 있으므로 텍스트 스타일이 변경됩니다.또한 사용자가 행을 마우스 오른쪽 단추로 클릭하여 선택할 수 있다는 사실도 부정하지 않습니다.데이터 그리드 행과의 상호 작용을 비활성화하려면 다음을 수행할 수 있습니다.
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</DataGrid.RowStyle>
<!--Other DataGrid items-->
</DataGrid>
행은 여전히 사용 가능하므로 텍스트 스타일은 변경되지 않습니다.
이제 선택한 행의 스타일만 변경하고 기능은 그대로 둔다면 다음을 수행할 수 있습니다(기본적으로 @Dan Stevens의 답변과 동일합니다).ControlTextBrushKey는 시스템에서 텍스트 항목에 색상을 지정하는 데 사용되는 브러시입니다.DynamicResource와 StaticResource 간의 설명은 이 답변을 참조하십시오.
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="Transparent"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<!--Other DataGrid items-->
</DataGrid>
위의 솔루션은 DataGridRow의 스타일을 변경하지 않습니다.아래에서 볼 수 있는 것처럼 행이 선택된 경우의 헤더입니다(첫 번째 행이 선택됨).
이것은 비교적 간단합니다.
datagrid.SelectionChanged += (obj, e) =>
Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() =>
datagrid.UnselectAll()));
그러면 데이터 그리드에서 모든 선택이 비활성화됩니다.
선택을 완전히 비활성화하지 않고 숨기려면 템플릿을 수정해야 합니다.
다른 스타일의 셀을 가지고 있고 모든 스타일을 재정의하거나 각 스타일에 트리거를 추가하지 않으려는 저와 같은 사람들에게는 이 방법이 좋습니다.
<DataGrid.Resources>
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightBrushKey}"
Color="#333333"/>
<SolidColorBrush
x:Key="{x:Static SystemColors.HighlightTextBrushKey}"
Color="Black"/>
<SolidColorBrush
x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}"
Color="Black"/>
<SolidColorBrush
x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}"
Color="Black"/>
</DataGrid.Resources>
HighlightBrushKey
는 활성 선택과 함께 강조 표시된 테두리입니다.HighlightTextBrushKey
선택 영역이 활성화된 텍스트 색상입니다.
이 경우 비활성 선택 항목을 선택하지 않은 것으로 표시합니다.
InactiveSelectionHighlightBrushKey
선택이 비활성화된 경우의 경계입니다.InactiveSelectionHighlightTextBrushKey
선택이 비활성화된 경우 텍스트입니다.
참고: SystemColors는 System의 일부인 정적 클래스입니다.창문들.미디어 네임스페이스입니다.당신은 그것을 검사하고 당신이 싫어하는 어떤 색도 뻔뻔스럽게 무시할 수 있습니다!
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Transparent"/> <!--Removes brush color change-->
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Foreground}"/> <!--Removes foregound change-->
<Setter Property="Background" Value="Transparent"/> <!--Removes backgound change-->
</Trigger>
</Style.Triggers>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/> <!--Removes dotted border when on cell selection change made by keyboard-->
</Style>
댄 스티븐스와 조슈아를 약간 수정했습니다밀러의 해결책.다음과 같은 경우 이 솔루션을 사용합니다.
- 전경색이 다른 셀이 있는 경우 색상을 시스템 색상으로 재설정하지 않으려면 이 한 가지 방법을 사용해야 합니다.ControlTextBrushKey(텍스트 브러시 키)
- 마우스 및 키보드로 셀(및 행) 선택을 비활성화하려는 경우
언급URL : https://stackoverflow.com/questions/3046988/wpf-datagrid-disable-selected-row-styles-or-row-selecting
'sourcetip' 카테고리의 다른 글
Bash의 폴더 크기 확인 (0) | 2023.05.03 |
---|---|
텍스트 파일을 한 줄씩 읽는 가장 빠른 방법은 무엇입니까? (0) | 2023.05.03 |
이클립스에 사용할 수 있는 vim 플러그인은 무엇입니까? (0) | 2023.04.28 |
Azure: Azure 앱 서비스를 위한 배포 슬롯 가격 (0) | 2023.04.28 |
Angular2 : 래핑 태그 없이 구성요소 렌더링 (0) | 2023.04.28 |