創建樹形節點:
(1):聲明樹形節點類,用於存儲節點圖標、名稱、類型、ID、子集合。
(2):在XAML中構建好TreeView資源,用於顯示節點數據。
(3):在邏輯代碼中自定義樹形節點數據,賦值給類;
(4):給TreeView的ItemSource賦值。
例子:
(1)
//在文件夾“_10Base”,聲明TreeView類,存儲圖標、名字、葉節點集合
public class TV
{
public string TvIcon { get ; set ; }
public string TvName { get ; set ; }
public List TvList { get ; set ; }
}
(2)
注意:【1】在命名空間中加上對類“TV()”的引用, 我把它命名爲 " myTree " , 例子,
<UserControl x:Class=“客戶端._07Basice.UserControl3”
…
xmlns:myTree=“clr-namespace:客戶端._10Base”
<TreeView Name="myTreeView">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type myTree:TV }"
ItemsSource = "{ Binding TvList , Mode = TwoWay , UpdateSourceTrigger=PropertyChanged }">
<StackPanel Orientation="Horizontal" Margin="0,2" >
<Image Height="18" Source="{ Binding TvIcon,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }">
</Image>
<TextBlock Text="{Binding TvName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }">
</TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView >
注意【1】:新建的類,常常會出現“找不到…”“不存在…” ,需要在確認代碼正確和類的路徑沒有錯誤,然後, “重新生成解決方案”,或者重新啓動"VS"。
(3):
[1]: 先引用命名空間
using 客戶端._10Base;
[2]:聲明葉節點集合
private static List<TV> TVList1;
private static List<TV> TVList2;
private static List<TV> SelectTreeView()
{
TVList = new List<TV>();
for( int i = 0; i < 5 ; i ++ )
{
TVList2 = new List<TV>();
for( int r = 0 ; r < 2 ; r ++ )
{
TV tvList2 = new TV();
tvList2.TvIcon = "/../../Image/Afoot2.png"
tvList2.TvName = "第二層子節點中的第"+r+"個節點";
tvList2.TvList = new List<TV>();
TVList2.Add(tvList2);
}
TV tvList1 = new TV();
tvList1.TvIcon = "/../../Images/Afoot3.png";
tvList1.TvName = "第一層子節點"+i+"";
tvList1.TvList = TVList2;
TVList1.Add(tvList1);
}
List<TV> TV0 = new List<_10Base.TV>()
{
new TV(){
TvIcon = "/../../Images/Afoot1.png",
TvName = "頂層父節點",
TvList = TVList1,
}
};
return TV0;
}
(4)
private void Main()
{
List<TV> stvTask = SelectTreeView();
this.myTreeView.ItemsSource = stvTask ;
}
注意:【1】:在(界面)XAML中聲明命名空間 的組成: “項目名稱+文件夾名字”;
與在(邏輯)代碼中聲明命名空間 的組成: “項目名稱+問價夾名字”;
它們兩個是一樣的組成,如果實際存在的類,在命名空間中顯示“不存在…”,就點擊項目,選擇“重新生成解決方案”。
【2】:對於樹形節點的類的字段,可以定義無限個,例子,
public class TV
{
//同時也可以使用構造函數去初始化
public TV()
{
this.TvIcon = “/…/…/需要的默認圖標”;
this.TvName =“默認名字”;
}
public string TvIcon { get; set; }
public string TvName { get; set; }
public List TvList { get; set; }
public TvType TvType { get; set; }
public string TvID { get; set; }
}
public enum TvType
{
TvFather,//根
TvSon,//葉
TvStruct//結構
}
【3】在(界面)中調用類中的成員,使用Binding 關鍵字:
如果調用的字段,在類中找不到,則不顯示內容。而不會報錯。