표준 WPF DataGrid
에서 파생 된 사용자 지정 DataGrid
컨트롤을 개발하여 일부 클라이언트 관련 요구 사항을 확장했습니다.사용자 지정 DataGrid 컨트롤의 하위 컨트롤 기본 스타일
내 .cs
파일의 코드 조각 : 내 .xaml
파일의
public class DataGrid : System.Windows.Controls.DataGrid
{
#region Constructor
static DataGrid()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(DataGrid),
new FrameworkPropertyMetadata(typeof(DataGrid)));
}
}
발췌문 :
<Style TargetType="local:DataGrid"
BasedOn="{StaticResource ResourceKey={x:Type DataGrid}}">
Style
태그에 x:Key
를 사용하지 않음으로써, 나는 제어를위한 기본 하나로서이 스타일 선언 . 이것은 내가 기대하는대로 작동합니다.
는 내가하지 않는 것은 내가 제대로 DataGridRow
, DataGridColumn
또는 DataGridColumnHeader
처럼 DataGrid
에 의해 사용되는 서브 컨트롤에 대한 기본 스타일을 선언하는 방법입니다.
한 가지 방법은 ... 이런 식으로 선언
<Style TargetType="{x:Type DataGridRow}">
... 그리고 그렇지 않으면 여전히 몇 가지 이유 (대한 표준 WPF 스타일을 사용 (명시 적으로 내 local:DataGrid
의 CellStyle
을 설정? 클라이언트가 로컬이 사용자 정의 DataGrid
를 사용하는 경우))
<Setter Property="CellStyle" Value="{StaticResource {x:Type DataGridCell}}"/>
, 그들은 단순히 {x:Type DataGridCell}
을 참조하여 스타일을 수정할 수있는 나는 꽤 우아한 찾을 :
<local:DataGrid>
<lolcal:DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
기본 스타일로 선언의 단점은 클라이언트가 표준 WPF DataGrid
을 사용하는 경우, 기본 스타일이 내 사용자 지정 DataGrid
에 의해 오버라이드 (override)하는 것입니다.
대안 방법은 ... 내 DataGridCell
스타일을 지정할 때 x:Key
속성을 사용하는 것입니다
<Style x:Key="DataGridCellStyleKey" TargetType="{x:Type DataGridCell}">
... 그리고 local:DataGrid
이 키
<Setter Property="CellStyle" Value="{StaticResource {x:Type DataGridCell}}" />
내의
CellStyle
설정
이렇게하면 기본 스타일을 덮어 쓰지는 않지만 고객이 CellStyle을 로컬로 수정하려는 경우 다시 작성해야합니다. x:Key
명시 적으로 ference :
<local:DataGrid>
<local:DataGrid.CellStyle>
<Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyleKey}">
나는 단순하고 유지 보수 이유로 x:Key
를 참조 그들을 피하기 싶어요. 또한 하드 코딩 x:Key
문자열을 참조 할 필요가 없도록, 그러나 할 Row/CellStyles
같은 기본 스타일을 설정하면 표준의 기본 스타일을 무시하지 않도록 :
는 내가 찾던 두 솔루션의 장점을 결합하는 방법입니다 WPF DataGrid
. 내가 생각할 수있는 유일한 솔루션은 DataGridCell
및 기타 하위 컨트롤에 대해서도 맞춤 컨트롤을 사용하는 것입니다. 이것이 가능한 솔루션입니까?
방금 시도했지만 XAML에서 사용자 지정 DataGrid를 만들 때 사용자가 표준 스타일을 확장 할 수있는 방법을 알 수 없습니다. '