2014-07-10 1 views
0

계층 구조에 여러 가지 데이터 유형을 나타내는 TreeView이 있습니다.TreeView의 각 노드마다 다른 "IsSelected"색

<UserControl.Resources> 
    <HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}" ItemsSource="{Binding Children}"> 
     .... 
    </HierarchicalDataTemplate> 

    <HierarchicalDataTemplate DataType="{x:Type local:MySecondType}" ItemsSource="{Binding Children}"> 
     .... 
    </HierarchicalDataTemplate> 

    .... etc .... 

</UserControl.Resources> 

내가 다른 가져가 선택한 색상이 노드의 각 유형을 가지고 싶습니다 나는 그 데이터 형식에 따라 각 노드의 모양을 변경하는 데 사용하는 내 UserControl.Resources에 정의 된 여러 HierarchicalDataTemplate의의를 가지고있다. 그러나 이러한 색상 (for example, this question) 변경시 발견 한 모든 예제는 HighlightBrushKey과 같은 시스템 정의 리소스를 변경하는 것을 포함합니다. TreeView에 의해 생성 된 TreeViewItem에 액세스 할 수 없기 때문에 항목별로 이러한 리소스 값을 재정의하려면 어떻게해야합니까?

답변

1

나는 달성 당신이 내가 개별적으로 DataTrigger를 사용하여 Background 색상을 설정할 수 있도록 Border 요소에 SelectedItem Background Transparent 다음 선언 내 아이템을 만들기 위해 언급 된 SystemColorsRelativeSource Binding을 설정하여 :

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 

. ..

<HierarchicalDataTemplate DataType="{x:Type local:MyFirstType}" 
    ItemsSource="{Binding Children}"> 
    <Border> 
     <Border.Style> 
      <Style TargetType="{x:Type Border}"> 
       <Setter Property="Background" Value="AliceBlue" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={ 
         RelativeSource AncestorType={x:Type TreeViewItem}}}" 
         Value="True"> 
         <Setter Property="Background" Value="LightGreen" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Style> 
    </Border> 
    <!-- Your content here --> 
</HierarchicalDataTemplate> 
+0

감사합니다. 시스템 색상을 변경할 수없는 경우에 대비 한 백업 옵션입니다. 지금까지 유일한 해결책으로 보입니다. –