WPF备忘---TreeView使用

TreeView的前后端编码体验

一、甩锅给后端

        1. XAML      

<TreeView x:Name="treeView1" SelectedItemChanged="treeView1_SelectedItemChanged">
    <!--定义每个TreeViewItem的样式-->
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="Margin" Value="5" />
            <!-- ... -->
        </Style>
    </TreeView.ItemContainerStyle>
    <!--定义TreeViewItem的数据模板-->        
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate 
            DataType="{x:Type local:Nodes}"
            ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal" >
                <Image Source="{Binding Icon}" />
                <TextBlock
                    Text="{Binding Name}"
                    FontSize="{Binding FontSize}"
                    Foreground="{Binding Foreground}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

        2. CS

// 1. 定义树形节点数据集  
public class Nodes
    {
        public Nodes()
        {
            this.Children = new ObservableCollection<Node>();
        }

        public string Name { get; set; }
        public double FontSize { get; set; }
        public ImageSource Icon { get; set; }
        public SolidColorBrush Foreground { get; set; }
        public ObservableCollection<Node> Children { get; set; }
    }
    
public class Node
    {
        public SolidColorBrush Foreground { get; set; }
        public ImageSource Icon { get; set; }
        public double FontSize { get; set; }
        public string Name { get; set; }
    } 

// 2. 从数据库取数据,初始化树
private List<Nodes> iniTree()
        {
            List<Nodes> lstNodes = new List<Nodes>();
            // 下面是仿真数据
            Nodes items1 = new Nodes()
            {
                FontSize=14,
                Name = "Node1",
                Foreground= new SolidColorBrush(Color.FromRgb(255,0,0)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon1.png"))
            };
            items1.Children.Add(new Node()
            {
                FontSize = 12,
                Name = "children1",
                Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon11.png"))
            });
            lstNodes.Add(items1);

            
            Nodes items2 = new Nodes()
            {
                FontSize=14,
                Name = "Node2",
                Foreground= new SolidColorBrush(Color.FromRgb(255,0,0)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon2.png"))
            };
            items2.Children.Add(new Node()
            {
                FontSize = 12,
                Name = "children2",
                Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon21.png"))
            });
            items2.Children.Add(new Node()
            {
                FontSize = 12,
                Name = "children3",
                Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 255)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon22.png"))
            });
            lstNodes.Add(items2);

            
            Nodes items3 = new Nodes()
            {
                FontSize=14,
                Name = "Node3",
                Foreground= new SolidColorBrush(Color.FromRgb(255,0,0)),
                Icon = new BitmapImage(new Uri("pack://application:,,/images/icon3.png"))
            };

            lstNodes.Add(items3);

            return lstNodes;
        }

        3. 调用
                

//在合适的位置绑定数据源
treeView1.ItemsSource = this.iniTree();

//处理交互
private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    var treeView = sender as TreeView;
    var selectedItem = treeView.SelectedItem as Node;
    if (selectedItem != null)
    {
        var sname = selectedItem.Name;
        //......
    }
}

二、甩锅给前端

        1. XAML

    <!-- 1. 先定义Style -->
    <Window.Resources>
        <Style x:Key="TreeViewItemLevel1" TargetType="{x:Type TreeViewItem}">
            <Setter Property="Margin" Value="5"/>
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="/Test;component/Resources/icon1.png" />
                            <TextBlock Text="{Binding}" FontSize="14"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>            
        </Style>

        <Style x:Key="TreeViewItemLevel2" TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Source="/Test;component/Resources/icon2.png" />
                            <TextBlock Text="{Binding}" Foreground="DarkBlue"/>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>

    <!-- 2. TreeView  -->
    <TreeView x:Name="treeView1" SelectedItemChanged="treeView1_SelectedItemChanged">
        <TreeViewItem Header="Node1" Style="{StaticResource TreeViewItemLevel1}" >
            <TreeViewItem Header="children1" Style="{StaticResource TreeViewItemLevel2}" />
            <TreeViewItem Header="children2" Style="{StaticResource TreeViewItemLevel2}" />
        </TreeViewItem>
        <TreeViewItem Header="Node2" Style="{StaticResource TreeViewItemLevel1}" >
            <TreeViewItem Header="children3" Style="{StaticResource TreeViewItemLevel2}" />
        </TreeViewItem>
    </TreeView>

        2. CS

   //别烦我,我手头还有很多工作...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值