2013-10-15 96 views
0

我有一個TreeView包含很多項目,顯然排列在樹形結構中。我試圖以正常字體以粗體和其所有子節點打印父節點。然而,當我這樣做時:樣式更改應用於TreeView節點的所有子節點

TreeViewItem item = GetParentNode(...); 
item.FontWeight = FontWeights.Bold; 

這不僅改變了父母的風格大膽,而且所有的孩子。我一直在尋找屬性來禁用TreeView類中的遞歸更新,但我找不到任何。我如何避免這種行爲?

+0

你是否在代碼背後?你在XAML中有HierarchicalDataTemplate嗎? – sexta13

+0

我確實在XAML中設計了「TreeView」(儘管代碼太簡單了,但幾乎沒有提及),但設置字體權重必須以編程方式完成,因爲它是用戶交互的一部分。 – Yellow

+0

看看這個:http://stackoverflow.com/questions/4487604/setting-font-of-parent-in-nodes-in-wpf-tree-view-to-bold-using-code-behind 它是顯示了類似的問題,用數據觸發器解決。 – sexta13

回答

0

設置字體屬性時,它會將其應用於所有孩子。您可以創建一個新的標題模板並將其僅應用於作爲父項的節點。

,在我的測試工作已經被設置前景色替代:

public MainWindow() 
    { 
     InitializeComponent(); 

     StyleParents(MyTreeView.Items); 
    } 

    private void StyleParents(ItemCollection items) 
    { 
     foreach (var i in items) 
     { 
      TreeViewItem tvi = i as TreeViewItem; 

      if (tvi != null) 
      { 
       if (tvi.HasItems) 
       { 
        tvi.Foreground = Brushes.Magenta; 

        StyleParents(tvi.Items); 
       } 
      }         
     } 
    } 
0

我發現,在WPF TreeView,屬性轉移到自己的孩子,如果他們沒有已經設置。避免此問題的最簡單方法(至少編程方式)是在創建子節點時將其設置爲默認字體。例如。

TreeViewItem item = new TreeViewItem(); 
item.FontWeight = FontWeights.Normal; 
// ...add item to tree 

如果您現在將父節點的FontWeight設置爲粗體,則子項不會更改。

相關問題