在WPF中treeview一般用於顯示文件夾目錄。
如果只用xaml實現,那麼就無法做到動態的改變,所以需要使用到C#代碼控制。
而之前準備做一個類似vs的打開.sln就會加載項目目錄這種結構的應用。遇到了一些問題。因爲買來的教材上面並沒有講到TreeView,而百度到的很多都是SilverLight的版本,根本沒辦法參照。在一番搜索之後終於知道了用代碼向TreeView中添加子節點。
在WPF中向TreeView添加節點的代碼爲:
TreeViewItem mtrNode = new TreeViewItem();
mtrNode.Header = "材料庫";
FileTree.Items.Add(mtrNode);
我寫的應用如下:
- 首先自定義一個TreeView樣式
<TreeView Name="FileTree">
<TreeView.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<Style TargetType="TreeViewItem">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<Border Name="border" BorderThickness="2" BorderBrush="Transparent" Padding="2" CornerRadius="5">
<TextBlock Text="{Binding}" Name="textBlock"/>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource TemplatedParent}}" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="Navy"/>
<Setter TargetName="textBlock" Property="Foreground" Value="Red"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
<TreeViewItem Header="Visual Studio" IsExpanded="True">
<TreeViewItem Header="Visual Studio 2012"/>
<TreeViewItem Header="Visual Studio 2010"/>
</TreeViewItem>
<TreeViewItem Header="SharpDevelop"/>
</TreeView>
- 在新建Page的時候傳入參數,重寫構造函數,此處的FileDir爲文件夾目錄
public EditPage(string FileDir) { InitializeComponent(); FileTree.Items.Clear(); /*添加material文件夾目錄*/ var mtrFiles = Directory.GetFiles(FileDir + "/material", ".rfa"); TreeViewItem mtrNode = new TreeViewItem(); mtrNode.Header = "材料庫"; foreach(string fileName in mtrFiles) { TreeViewItem item = new TreeViewItem(); item.Header = fileName.Substring((FileDir).Length + 10); mtrNode.Items.Add(item); } FileTree.Items.Add(mtrNode); /*添加rfa文件夾目錄*/ var rfaFiles = Directory.GetFiles(FileDir+"/rfa", "*.rfa"); TreeViewItem rfaNode = new TreeViewItem(); rfaNode.Header = "族庫"; foreach (string fileName in rfaFiles) { TreeViewItem item = new TreeViewItem(); item.Header = fileName.Substring((FileDir).Length +5); rfaNode.Items.Add(item); } FileTree.Items.Add(rfaNode); }
- 運行效果: