在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); }
- 运行效果: