最近用到treeview 控件 整理了下 ,前台代码:
<Page.Resources>
<Style x:Key="TreeViewItemFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="Padding" Value="1,0,0,0"/>
<Setter Property="Margin" Value="0,5,0,0"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="19" Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Border x:Name="Bd" BorderBrush="#FF09F509" CornerRadius="15" BorderThickness="5" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Grid.ColumnSpan="3" Style="{DynamicResource ToggleButtonStyle}" Background="Transparent"/>
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="false">
<Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
</Trigger>
<Trigger Property="HasItems" Value="false">
<Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="#22FFA500"/>
</Trigger>
<Trigger Property="IsSelected" Value="False" >
<Setter Property="IsExpanded" Value="False"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="ToggleButtonStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid x:Name="Chrome" Background="Transparent" SnapsToDevicePixels="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="Chrome" Value="Transparent"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="Chrome" Value="Transparent"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*" />
<ColumnDefinition Width="333*" />
<ColumnDefinition Width="1380*" />
<ColumnDefinition Width="157*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="60*" />
<RowDefinition Height="940*" />
<RowDefinition Height="80*" />
</Grid.RowDefinitions>
<TreeView x:Name="TreeView" Background ="Transparent" BorderThickness="0" Grid.Row="1" Grid.Column="1"
ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden"
SelectedItemChanged="TreeView_SelectedItemChanged" TreeViewItem.Selected="treeView1_Selected">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<Border Width="200" Height="100" Background="#15000000" >
<TextBlock Text="{Binding Name}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<Button Content="返回" Grid.Column="3" Grid.Row="1" Height="90" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Bottom" Width="150" Style="{StaticResource ButtonStyle}" Click="button1_Click"/>
</Grid>
后台代码:
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeView items = sender as TreeView;
Node node = items.SelectedItem as Node;
MessageBox.Show(node.Name);
}
private void treeView1_Selected(object sender, RoutedEventArgs e)
{
//TreeView items = sender as TreeView;
//Node node = items.SelectedItem as Node;
//MessageBox.Show(node.Name);
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
if (Directory.Exists(baseRoot))
{
Node node =new Node();
NodeAdd(node, baseRoot);
this.TreeView.ItemsSource = node.Nodes;//绑定TreeView.Items数据源
}
}
private void NodeAdd(Node node,string path)
{
DirectoryInfo dInfo = new DirectoryInfo(path);
if (dInfo.Exists)
{
string[] files = Directory.GetFileSystemEntries(path);
for (int j = 0; j < files.Length; j++)
{
Node _node = new Node();
string _name = Path.GetFileNameWithoutExtension(files[j]);
_node.Path = files[j];
_node.Name = _name;
node.Nodes.Add(_node);
NodeAdd(_node, files[j]);
}
}
}
public class Node
{
//构造函数
public Node()
{
this.Nodes = new List<Node>();
}
public string Name { get; set; }//名称
public string Path { get; set; }//路径
public List<Node> Nodes { get; set; }//节点集合
}