2016-09-26 2 views
0

표준 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:DataGridCellStyle을 설정? 클라이언트가 로컬이 사용자 정의 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 및 기타 하위 컨트롤에 대해서도 맞춤 컨트롤을 사용하는 것입니다. 이것이 가능한 솔루션입니까?

답변

0

나는 다음과 같이 사용자 정의 데이터 그리드의 기본 스타일의 범위에서 첫 번째 방법에서 스타일을 선언 할 수 있다고 생각 :

<Style TargetType="local:DataGrid" BasedOn="{StaticResource ResourceKey={x:Type DataGrid}}"> 
    <Setter Property="CellStyle"> 
     <Setter.Value> 
      <Style TargetType="DataGridCell"> 
       <!-- Your Default Style here --> 
      </Style> 
     </Setter.Value> 
    </Setter> 
</Style> 

이 기본 DataGrids를의 CellStyle을 무시하지 않으며, 쉽게 사용자에 의해 변경 수 .

+0

방금 ​​시도했지만 XAML에서 사용자 지정 DataGrid를 만들 때 사용자가 표준 스타일을 확장 할 수있는 방법을 알 수 없습니다. '