2012-01-04 5 views
6

내 프로젝트 중 하나에서 ListView를 상속하고 새 컨트롤 템플릿을 설정하여 스타일을 재정의했습니다. 또한 열 머리글 스타일을 재정의했습니다. 스타일 키를 설정하고의 GridView에 스타일을 참조하여ListView 스타일 내에서 GridViewColumnHeader 스타일 설정

1) : 지금까지 나는이 작업을 수행하는 두 가지 방법을 발견했다

<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
    <Setter Property="Background" Value="Wheat" /> 
</Style> 

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

2) 상기 스타일의 스타일 키를 설정하지 않음으로써. 이제 GridView에서 스타일을 참조 할 필요는 없지만 목록 뷰 유형과 상관없이 응용 프로그램의 모든 listview 헤더를 재정의합니다.

내 응용 프로그램에서 많은 listviews를 사용하기 때문에 세 번째보다 유연한 방법으로이 작업을 수행하고 싶습니다. ListView 스타일 내부에서 GridView.ColumnHeaderContainerStyle을 설정합니다. 그렇게하면 각 GridView에서 머리글 스타일을 참조 할 필요가 없습니다.

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Setter Property="GridView.ColumnHeaderContainerStyle" Value="{StaticResource MyHeaderStyle}" />    
     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" /> 
      <GridViewColumn Header="Column2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 

이 불행하게도 헤더 스타일을 설정하지 않습니다 내가 위의 XAML이 변경하면, 그것은 작동 ... :

<GridView ColumnHeaderContainerStyle="{StaticResource MyHeaderStyle}"> 

하나를 여기에 지금까지 XAML의 단순화 된 버전입니다 아이디어?

답변

6

감사 을 저를 올바른 방향으로 가리 키기 위해 님을 만났습니다. 내가 원하는 것을 성취 할 길을 찾았습니다.

리소스 섹션을 ListView 내에 배치 할 필요는 없습니다 (각 ListView에 대한 사용자 정의 태그의 종류는 내가 처음부터 제거하고 싶었던 것입니다). 리소스 대신 ListView 스타일로 이동할 수 있습니다.

<Window.Resources> 
    <Style TargetType="{x:Type GridViewColumnHeader}" x:Key="MyHeaderStyle"> 
     <Setter Property="Background" Value="Wheat" /> 
    </Style> 

    <Style TargetType="{x:Type list:MyListView}"> 
     <Style.Resources> 
      <Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource MyHeaderStyle}" /> 
     </Style.Resources> 

     <Setter Property="Background" Value="Linen" />         
    </Style> 
</Window.Resources> 

<list:MyListView> 
    <list:MyListView.View> 
     <GridView> 
      <GridViewColumn Header="Column1" x:Name="col1" /> 
      <GridViewColumn Header="Column2" x:Name="col2" /> 
     </GridView> 
    </list:MyListView.View> 
</list:MyListView> 
: 여기

정확히 내가 그것을 원하는 방식으로 작동 업데이트 된 XAML입니다
3

키가없는 경우 지정된 TargetType의 모든 요소에 적용됩니다.

<GridViewColumn HeaderContainerStyle="{StaticResource MyHeaderStyle}" Header="Column1"/> 

또는 당신이 당신의 ListView 내 스타일을 설정할 수 있습니다, 그래서 그것은 단지 그 안에 요소에 적용됩니다 : 당신의 스타일이 키를 가지고 있다면, 당신은 명시 적으로 사용할 필요가

<list:MyListView> 
    <list:MyListView.Resources> 
     <Style TargetType="{x:Type GridViewColumnHeader}"> 
      <Setter Property="Background" Value="Wheat" /> 
     </Style> 
    </list:MyListView.Resources> 
</list:MyListView>