2009-11-07 10 views
3

나는 열이있는 ListView에 특정 스타일을 갖고 싶어 :WPF 목록보기 : 헤더 스타일링

모든 열 머리글의 배경 마우스가 이상 그들 중 하나에있을 때를 제외하고 투명해야한다.

이 문제가 발생하면 마우스가 끝난 열의 배경이 노란색이어야하고 다른 열의 모든 색은 파란색이어야합니다.

GridViewColumnHeader 템플릿으로 재생 해봤지만 활성 열 배경 만 변경하는 것처럼 보입니다. 어떤 도움이 필요합니까?

답변

1

마지막으로, 나는이 작업을 수행하는 방법을 발견 : 기본적으로, 상위 GridViewHeaderRowPresenter을 선택하면 볼 수 트리거를 설정합니다. 모든 헤더는 해당 속성에 true을 반환합니다.

그런 다음 헤더에 마우스가 있고 선택한 헤더 만 true을 반환하는지 확인합니다.

결과는 다음과 같이 될 것입니다 : 이

<ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
            AncestorType={x:Type GridViewHeaderRowPresenter}}, 
           Path=IsMouseOver}" 
       Value="True"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderActiveColumnBackground}"/> 
    <Setter TargetName="PART_HeaderGripper" Property="Background" 
      Value="{StaticResource VerticalLineColor}"/> 
    </DataTrigger> 
    <Trigger Property="IsMouseOver" Value="True"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderSelectedColumnBackground}"/> 
    </Trigger> 
    <Trigger Property="HasContent" Value="false"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/> 
    <Setter TargetName="PART_HeaderGripper" Property="Background" 
      Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/> 
    </Trigger> 
</ControlTemplate.Triggers> 
2

이렇게하려면 전체 ListView 스타일을 교체해야 할 것입니다. Microsoft has an example.

당신은 거기에 표시된 ScrollViewer 스타일로 GridViewHeaderRowPresenter 주위에 Border를 넣고 블루에 그 Border의 배경을 설정하는 IsMouseOver 트리거를 추가해야합니다.

그런 다음 GridViewColumnHeader 템플릿에서 배경을 노란색으로 만들려면 IsMouseOver 트리거가 필요합니다.

추가 설명이 필요하면 질문하십시오.

- 는 HTH, 먼지

+0

내가 찾은 해결책은 당신이 언급 한 것과 생각이 비슷 생각은, 당신이 필요로 전용하는 스타일링에서 ScrollViewer 및 광산에있을 것입니다 GridViewColumnHeader를 직접 호출합니다. 어쨌든 고마워! – federubin