2011-08-10 82 views
2

我想爲WPF和c#中的treeView構建模板。我的問題是我想爲每個項目級別應用不同的模板。 我的意思是,第一個項目級別將與第二級項目看起來不同。 我不知道如何使用模板和綁定來做到這一點,因爲我對這項技術很陌生。 我也試圖將按鈕添加到某個treeviewItems級別,所以我可以觸發事件或命令...我知道這是很多要問,但我希望有人會給我一個線索,至少如果它是否可能。 謝謝。TreeView按鈕多層次自定義模板

+0

@齊亞德:這是可能的。每個TreeNode都是一個容器,您可以在其中添加自定義控件。 – CharithJ

+0

其可能! [點擊這裏!](http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=tree+view+wpf+codeproject) – stukselbax

+0

謝謝你們。你真的幫助了我。我現在有了更好的理解! – 2011-08-13 08:32:17

回答

1

假設所有對象都是相同的類型,我可以看到兩個方法來實現這將是使用ItemTemplate或ItemTemplateSelector屬性。

個人而言,我更喜歡使用ItemTemplate屬性的XAML方法。

在模板中,您可以指定觸發器根據項目所在的級別來改變外觀。爲了獲得這個級別,你可以指定一個類似的轉換器:

public class TreeViewItemToLevelConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is DependencyObject)) 
      return 0; 

     return findLevel(value as DependencyObject, -1); 
    } 

    private int findLevel(DependencyObject tvi, int level) 
    { 
     DependencyObject tv = ItemsControl.ItemsControlFromItemContainer(tvi) as DependencyObject; 

     if (tv != null) 
      return findLevel(tv, level + 1); 
     else 
      return level; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new Exception("The method or operation is not implemented."); 
    } 
} 
+0

我的投票在這裏。我想補充一點,你應該確定你的意思是「等級」。它是視覺層面還是邏輯層面?作爲「邏輯層次」,我指的是顯示的項目的邏輯重要性,不一定與視覺層次匹配。如果是這樣,我會建議在你的模型中提供一個專門的屬性「級別」,而不是計算所示的「脂肪」。但是,對於視覺方式來說,「脂肪」片段沒問題。 –