2013-08-02 2 views
0

내 데이터 계층 구조에서 일반 파생 래퍼 클래스에 데이터가 바인딩되는 TreeView가 있습니다. 내 바인딩 된 래퍼 클래스에는 "IsHilighted"및 "IsExpanded"와 같은 추가 된 필드가 포함됩니다.바운드 데이터의 속성에 따라 TreeViewItem 배경색을 변경하는 방법은 무엇입니까?

바운드 데이터 속성 "IsHiglighted"에 따라 TreeViewItem의 배경을 변경하고 싶습니다. Hilighted 항목의 색상을 기본 Selected 항목 배경색과 같거나 가벼운 색상으로 설정하고 싶습니다.

이상적으로는 기존 XAML을 수정하지 않으려 고합니다. 결국 코드를 ​​통해 동작을 추가 할 수 있음을 의미합니다.

UPDATE는

나는 부분적인 해결책을 발견 : 나는 아래에 정의 된 트리거를 추가했다. 코드는 아래에 포함되어 있습니다.

 <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/> 

      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=IsHilighted}" Value="true"> 
        <Setter Property="Background" Value="SlateBlue"></Setter> 
        <Setter Property="Opacity" Value="160"></Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

은 아직 해결되지 : 어떻게 선택 기존에 바인딩 즉, 부분적인 해결책에 "SlateBlue을"교체 "선택한"TreeViewItem 배경 색상 (위의 부분적인 해결책 참조) Hilighted 항목의 색상을 결합 수 항목 스타일 배경색?

원래 트 리뷰 XAML 코드 :

<TreeView Name="TreeViewSelectScopeStudy" MinHeight="24" Margin="7" ItemsSource="{Binding Path=TvItemRootPssTreeViewRoot.ChildsView}" Height="Auto" 
    VerticalAlignment="Stretch" 
    VirtualizingStackPanel.IsVirtualizing="True" 
    VirtualizingStackPanel.VirtualizationMode="Recycling"> 

    <TreeView.Resources> 

     <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/> 
     </Style> 


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

     <HierarchicalDataTemplate DataType="{x:Type scopeSelection:WrapperSimulatedInfoStudy}" ItemsSource="{Binding Path=Childs}"> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox IsChecked="{Binding Path=IsSelected}"></CheckBox> 
       <TextBlock Text="{Binding Path=TvItemName}" Margin="5,0,0,0"></TextBlock> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate DataType="{x:Type scopeSelection:WrapperSimulatedInfoSimulation}"> 
      <StackPanel Orientation="Horizontal" ToolTip="{Binding Path=Item.InvalidityReason}"> 
       <StackPanel.Style> 
        <Style TargetType="{x:Type StackPanel}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path=Item.IsValid}" Value="false"> 
           <Setter Property="Opacity" Value="160"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </StackPanel.Style> 
       <CheckBox IsChecked="{Binding Path=IsSelected}" IsEnabled="{Binding Path=Item.IsValid}" ToolTip="{Binding Path=Item.InvalidityReason}"></CheckBox> 
       <CheckBox IsChecked="{Binding Path=IsHilighted}"></CheckBox> 
       <TextBlock Text="{Binding Path=TvItemName}" Margin="5,0,0,0" ToolTip="{Binding Path=Item.InvalidityReason}"> 
        <TextBlock.Style> 
         <Style TargetType="{x:Type TextBlock}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Path=Item.IsValid}" Value="false"> 
            <Setter Property="Background" Value="LightPink"></Setter> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </TextBlock.Style> 
       </TextBlock> 
      </StackPanel> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 

답변

1

당신은 IsItemSelected라는 또 하나 개의 속성을 정의하고 TreeViewItemIsSelected 속성에 (당신이 IsExpanded에 대해 수행 한 방법과 유사)을 결합 할 수있다.

<Style TargetType="TreeViewItem"> 
    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}"/> 
    <Setter Property="IsSelected" Value="{Binding Path=IsItemSelected}"/> 
</Style> 

그럼 당신은 IsItemSelected 속성에 대한 DataTrigger을 정의하고 배경 색상을 설정할 수 있습니다.

<DataTrigger Binding="{Binding Path=IsItemSelected}" Value="true"> 
    <Setter Property="Background" Value="Blue"></Setter> 
</DataTrigger> 
+0

감사합니다. 나는 그것이 제대로 작동해야한다는 것에 동의한다. 하지만 가장 큰 문제는 "선택한 항목 스타일"의 기존 색상에 바인딩하는 방법을 찾는 것입니다. TreeViewItemStyle 또는 다른 방법의 "선택한 스타일"을 기반으로 새 스타일을 정의해야하는지 궁금합니다. 그리고 그것을하는 방법. 나는 현재 코드로 시도하고 있지만 약간의 어려움이있다. –