2013-08-02 81 views
0

我有一個TreeView,其中數據綁定到我的數據層次結構上的泛型派生包裝類。 我的綁定包裝類包括添加字段,如「IsHilighted」和「IsExpanded」。如何根據綁定數據的屬性更改TreeViewItem的背景顏色?

我想根據其綁定數據屬性「IsHiglighted」更改任何TreeViewItem的背景。我希望將Hilighted項目的顏色設置爲與默認選定項目背景顏色相同(或更輕)的顏色。

理想情況下,我想不修改現有的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> 

仍然沒有得到解決:我怎麼能結合加亮後項目的顏色(見上部分解決方案)「選定」樹型視圖背景顏色,如更換「青藍」關於部分解決結合現有的選擇項目風格的背景顏色?

原始TreeView控件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並將其綁定到TreeViewItem小號IsSelected屬性(類似於你如何爲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的「選擇樣式」或其他方式定義新樣式?以及如何去做。我目前正在嘗試通過代碼來實現,但我遇到了一些困難。 –

相關問題