2013-05-27 43 views
4

我在我的WPF應用程序中有Treeview。在運行時,如果Tree的元素滿足一定條件,則應將它的Font color從黑轉換爲紅。更改Treeview中特定元素的顏色WPF

XAML

<TreeView Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Name="treeView1" 
         VerticalAlignment="Stretch" 
         SelectedItemChanged="treeView1_SelectedItemChanged" HorizontalContentAlignment="Stretch" 
         VerticalContentAlignment="Top" BorderThickness="0,0,0,1" BorderBrush="LightGray"> 

    <TreeViewItem Header="Head Tree" ItemsSource="{Binding MainComps}"> 
     <TreeViewItem.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
      <Setter Property="FontWeight" Value="Normal" /> 

      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="FontWeight" Value="Bold" /> 
       </Trigger> 

       <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
         <Setter Property="Foreground" Value="RED" /> 
       </DataTrigger> 
      </Style.Triggers>         
     </Style> 
    </TreeViewItem.ItemContainerStyle> 

    <TreeViewItem.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Head Tree" /> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate DataType="{x:Type local:MainCompViewModel}" ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Maincompname}" /> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <HierarchicalDataTemplate DataType="{x:Type local:FeatureViewModel}" ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding FeatureName}" /> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

     <DataTemplate DataType="{x:Type local:CompViewModel}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Component}" /> 
      </StackPanel> 
     </DataTemplate>        
    </TreeViewItem.Resources> 
    </TreeViewItem> 
</TreeView> 

Code behind

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    if(selected Item meets certain condition) 
    { 
     //Change color of tree node 
    } 
} 

如何更改特定節點的顏色,讓它在同一個顏色,這樣,當再次擴大它應該是RED。 任何幫助,將不勝感激。

回答

6

您可以在模型中創建布爾屬性,當元素滿足條件時爲true。然後你綁定前景,像這樣:

     <TreeView.ItemContainerStyle> 
          <Style TargetType="{x:Type TreeViewItem}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding Path=BoolProp}" Value="False"> 
             <Setter Property="Foreground" Value="Blue"></Setter> 
            </DataTrigger> 
            <DataTrigger Binding="{Binding Path=BoolProp}" Value="True"> 
             <Setter Property="Foreground" Value="Red"></Setter> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </TreeView.ItemContainerStyle> 

或轉換器:

     <TreeView.ItemContainerStyle> 
          <Style TargetType="{x:Type TreeViewItem}"> 
           <Setter Property="Foreground" Value="{Binding Path=BoolProp, Converter={StaticResource ResourceKey=TheKey}}"/> 
          </Style> 
         </TreeView.ItemContainerStyle> 
+0

而不是特定的元素,所選節點下面的所有孩子變成紅色。 – BinaryMee

4

只要改變前景:

TreeViewItem ti = (TreeViewItem)treeView1.SelectedItem; 
ti.Foreground = Brushes.Red; 
+0

正在此錯誤。 'System.Windows.Controls.TreeView'不包含'SelectedNode'的定義,並且沒有找到接受'System.Windows.Controls.TreeView'類型的第一個參數的擴展方法'SelectedNode'(你是否缺少using指令或者是一個程序集引用?) – BinaryMee

+1

我認爲它的'SelectedItem',而不是'SelectedNode'。 –

+0

是的,SelectedItem似乎是WPF(正在使用表單)的方式。但是,這返回一個對象。嘗試如下: TreeViewItem ti =(TreeViewItem)treeView1.SelectedItem; ti.Foreground = Color.Red; – MedMik

0

嵌入到模板中。您只能通過複製控件的默認Aero-Style並更改硬編碼值來更改顏色。

或者通過鑽取視覺樹負載來改變它的方式。

若要獲取默認的風格& tenmplate通過這個MSDN

也可以從這裏查看逐步的EXAMPLE