zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    剑指Offer-11.二进制中1的个数(C++/Java)
    剑指Offer-10.矩形覆盖(C++/Java)
    剑指Offer-9.变态跳台阶(C++/Java)
    UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
    UVA1607 Gates 与非门电路 (二分)
    UVA 1451 Average平均值 (数形结合,斜率优化)
    UVA 1471 Defense Lines 防线 (LIS变形)
    UVA 1606 Amphiphilic Carbon Molecules 两亲性分子 (极角排序或叉积,扫描法)
    UVA 11134 FabledRooks 传说中的车 (问题分解)
    UVA 1152 4 Values Whose Sum is Zero 和为0的4个值 (中途相遇)
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/4024058.html
Copyright © 2011-2022 走看看