WPF TreeView控件使用

最近用到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; }//节点集合
    }

猜你喜欢

转载自blog.csdn.net/feitiankoulan/article/details/24362371