• Silverlight TreeView 带 checkbox和图片


    前段时间做Silverlight TreeView 控件,但是要带checkbox和图片,在网上到处找相关的例子,效果图如下

    xaml代码

    <UserControl x:Class="SlmenuTest.Tree"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:common="clr-namespace:System.Windows;assembly=System.Windows.Controls"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
    
        <UserControl.Resources>
            <common:HierarchicalDataTemplate x:Key="Level3Template">
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding Icon}" Width="16" Height="16"/>
                    <CheckBox />
                    <TextBlock Text="{Binding Name}"  Foreground="Black" />
                </StackPanel>
            </common:HierarchicalDataTemplate>
            
            <common:HierarchicalDataTemplate x:Key="Level2Template" ItemsSource="{Binding Level3s}" ItemTemplate="{StaticResource Level3Template}">
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding Icon}" Width="16" Height="16"/>
                    <CheckBox />
                    <TextBlock Text="{Binding Name}" Foreground="Green"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>
            
            <common:HierarchicalDataTemplate x:Key="Level1Template" ItemsSource="{Binding Level2s}" ItemTemplate="{StaticResource Level2Template}">
                <StackPanel  Orientation="Horizontal">
                    <Image Source="{Binding Icon}" />
                    <CheckBox />
                    <TextBlock Foreground="Blue" Text="{Binding Name}"/>
                </StackPanel>
            </common:HierarchicalDataTemplate>
        </UserControl.Resources>
    View Code

    后台代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.ObjectModel;
    
    namespace SlmenuTest
    {
        public partial class Tree : UserControl
        {
    
           
    
            public Tree()
            {
                InitializeComponent();
                InitTreeData();
            }
    
    
    
            #region Data
            private void InitTreeData()
            {
                myTree.ItemsSource = new ObservableCollection<Level1>
                {
                    new Level1
                    {
                        Name = "test1",
                        Icon="../images/default.png",
                        Level2s = 
                        { 
                            new Level2
                            {
                                Name="基础信息",
                                Icon = "../images/search.png",
                                Level3s = 
                                { 
                                    new Level3 { Name = "类别" ,Icon = "../images/computer.png"}, 
                                    new Level3 { Name = "部门" ,Icon = "../images/computer_on.png"},
                                    new Level3 { Name = "类别2" ,Icon = "../images/exit.png"},
                                    new Level3 { Name = "部门2" ,Icon = "../images/edit.png"}
                                }
                            },
                            new Level2
                            {
                                Name="扩展信息",
                                Icon="../images/search.png"
                            }
    
                        }
                    },
                    new Level1
                    {
                        Name="test2",
                        Icon="../images/default.png",
                        Level2s=
                        {
                            new Level2
                            {
                                Name="报表管理", 
                                Icon = "../images/search.png",
                                Level3s = 
                                { 
                                    new Level3 { Name = "报表1" ,Icon = "../images/default.png"},
                                    new Level3 { Name = "报表2" ,Icon = "../images/default.png"},
                                    new Level3 { Name = "报表3" ,Icon = "../images/default.png"},
                                    new Level3 { Name = "报表4",Icon="../images/default.png"}
                                }
                            }
                        }
                    },
                    new Level1
                    {
                        Name="test3",
                        Icon="../images/default.png",
                        Level2s=
                        {
                            new Level2
                            {
                                Name="系统管理",
                                Icon = "../images/search.png",
                                Level3s = 
                                { 
                                    new Level3 { Name = "权限设置" ,Icon = "../images/default.png"},
                                    new Level3 { Name = "用户管理" , Icon = "../images/default.png"}
                                }
                            }
                        }
                    }
    
                };
            }
            #endregion
    
            private void myTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                TreeViewItem item = e.NewValue as TreeViewItem;
                
            }
           
        }
    
    
        public class Level1
        {
            public Level1()
            {
                Level2s = new ObservableCollection<Level2>();
            }
            public string Name { get; set; }
            public string Icon { get; set; }
            public ObservableCollection<Level2> Level2s { get; set; }
        }
    
        public class Level2
        {
            public Level2()
            {
                Level3s = new ObservableCollection<Level3>();
            }
    
            public string Name { get; set; }
            public string Icon { get; set; }
            public ObservableCollection<Level3> Level3s { get; set; }
        }
    
        public class Level3
        {
            public string Name { get; set; }
            public string Icon { get; set; }
            //public event EventHandler click;
        }
    }
    View Code

    第二种效果图如下

    xaml代码如下

    <UserControl x:Class="SLColorPickerDemo.Tree"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
    
        <UserControl.Resources>
            <Style x:Key="RedItemStyle" TargetType="sdk:TreeViewItem">
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="images/default.png"/>
                                <CheckBox />
                                <TextBlock Text="{Binding}" Foreground="Red" FontStyle="Italic" />
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="IsExpanded" Value="False" />
            </Style>
        </UserControl.Resources>
    
    
    
        <Grid x:Name="LayoutRoot" Background="White">
            <sdk:TreeView Margin="5" Grid.Column="0" Grid.Row="1" Name="tvTree" SelectedItemChanged="tvTree_SelectedItemChanged" />
            <Border BorderBrush="Gray" BorderThickness="1" Padding="8" Margin="5">
                <StackPanel x:Name="DetailsPanel" Margin="4" Width="155">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="版块ID: " FontWeight="Bold"  />
                        <TextBlock Text="{Binding ForumID}" />
                    </StackPanel>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="版块名称: " FontWeight="Bold"  />
                        <TextBlock Text="{Binding ForumName}" />
                    </StackPanel>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="版块信息: " FontWeight="Bold" />
                        <TextBlock x:Name="DetailText" TextWrapping="Wrap" Text="{Binding ForumName}"/>
                    </StackPanel>
                </StackPanel>
            </Border>
        </Grid>
    </UserControl>
    View Code

    后台代码

    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.ComponentModel;
    
    namespace SLColorPickerDemo
    {
        public class ForumInfo : INotifyPropertyChanged
        {
            public int ForumID { get; set; }
            public int ParendID { get; set; }
            public string ForumName { get; set; }
    
            #region INotifyPropertyChanged 成员
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            private void PropertyChaged(string propertyName)
            {
                PropertyChangedEventHandler handle = PropertyChanged;
                if (handle != null)
                    handle.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
    
            #endregion
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Collections.ObjectModel;
    
    namespace SLColorPickerDemo
    {
        public partial class Tree : UserControl
        {
    
            List<ForumInfo> forumList = new List<ForumInfo>();
    
            public Tree()
            {
                InitializeComponent();
                forumList = GetForumData();
                AddTreeNode(0, null);
            }
    
    
            private void AddTreeNode(int parentID, TreeViewItem treeViewItem)
            {
                List<ForumInfo> result = (from forumInfo in forumList
                                          where forumInfo.ParendID == parentID
                                          select forumInfo).ToList<ForumInfo>();
    
                if (result.Count > 0)
                {
                    foreach (ForumInfo foruminfo in result)
                    {
                        TreeViewItem objTreeNode = new TreeViewItem();
                        objTreeNode.Header = foruminfo.ForumName;
                        objTreeNode.DataContext = foruminfo;
    
    
                        objTreeNode.ItemContainerStyle = this.Resources["RedItemStyle"] as Style;
                        //添加根节点
                        if (treeViewItem == null)
                        {
                            tvTree.Items.Add(objTreeNode);
                            //tvTree.ItemContainerStyle = this.Resources["TreeStyle"] as Style;
                        }
                        else
                        {
                            treeViewItem.Items.Add(objTreeNode);
                        }
                        AddTreeNode(foruminfo.ForumID, objTreeNode);
                    }
                }
            }
    
    
            public List<ForumInfo> GetForumData()
            {
                List<ForumInfo> forumList = new List<ForumInfo>();
                forumList.Add(new ForumInfo() { ForumID = 1, ParendID = 0, ForumName = "笔记本版块" });
                forumList.Add(new ForumInfo() { ForumID = 2, ParendID = 0, ForumName = "台式机版块" });
    
                forumList.Add(new ForumInfo() { ForumID = 3, ParendID = 1, ForumName = "Dell笔记本" });
                forumList.Add(new ForumInfo() { ForumID = 4, ParendID = 1, ForumName = "IBM笔记本" });
                forumList.Add(new ForumInfo() { ForumID = 5, ParendID = 4, ForumName = "IBM-T系列" });
                forumList.Add(new ForumInfo() { ForumID = 6, ParendID = 4, ForumName = "IBM-R系列" });
    
                forumList.Add(new ForumInfo() { ForumID = 7, ParendID = 2, ForumName = "联想台式机" });
                forumList.Add(new ForumInfo() { ForumID = 8, ParendID = 2, ForumName = "方正台式机" });
                forumList.Add(new ForumInfo() { ForumID = 9, ParendID = 2, ForumName = "HP台式机" });
                forumList.Add(new ForumInfo() { ForumID = 10, ParendID = 7, ForumName = "联想家悦H系列" });
                forumList.Add(new ForumInfo() { ForumID = 11, ParendID = 7, ForumName = "联想IdeaCentre系列" });
    
                return forumList;
            }
    
            private void tvTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
            {
                TreeViewItem item = e.NewValue as TreeViewItem;
                ForumInfo fi = item.DataContext as ForumInfo;
    
                DetailsPanel.DataContext = fi;
            }
        }
    }
    View Code

    时间比较长了参考的文章找不到,找到了再把链接贴上。

  • 相关阅读:
    TMS 例子63 分组,子node
    读写注册表 registrykey 创建删除
    如何打开 系统信息窗体和 DirectX诊断工具
    Socket 类通信例子-第24章
    判断IP地址是否合法类
    MySQL存储过程与存储函数的区别
    电脑设定自动开关机,并记录开关机时间
    WPS 表格筛选两列相同数据-完美-2017年11月1日更新
    通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
    Delphi中滚动文字的应用
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/4024058.html
Copyright © 2020-2023  润新知