1.TreeViewSample.xaml

View Code
<UserControl xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"  x:Class="Silverlight.Common.View.TreeViewSample"
    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="400" d:DesignWidth="1100">
 
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition  Height="400"/>
            <RowDefinition Height="25"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition  Width="200"/>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition Width="200"/>
        </Grid.ColumnDefinitions>
        <sdk:TreeView >
            <sdk:TreeViewItem Header="TreeViewItem1"></sdk:TreeViewItem>
            <sdk:TreeViewItem Header="TreeViewItem2">
                <sdk:TreeViewItem Header="TreeViewItemA"></sdk:TreeViewItem>
                <sdk:TreeViewItem Header="TreeViewItemB">
                    <sdk:TreeViewItem Header="TreeViewItemC" IsEnabled="False"></sdk:TreeViewItem>
                </sdk:TreeViewItem>
            </sdk:TreeViewItem>
        </sdk:TreeView>
 
        <sdk:TreeView Grid.Column="1" x:Name="t1">
            <sdk:TreeViewItem Header="TreeViewItem1" x:Name="ti1">
                <Button Content="按钮1"></Button>
                <TextBox Text="文本框1"></TextBox>
                <CheckBox IsChecked="True"></CheckBox>
            </sdk:TreeViewItem>
            <sdk:TreeViewItem Header="TreeViewItem2"  x:Name="ti2">
                <sdk:TreeViewItem Header="TreeViewItemA">
                    <Button Content="按钮2"></Button>
                    <TextBox Text="文本框2"></TextBox>
                    <RadioButton IsChecked="True"></RadioButton>
                    <RadioButton ></RadioButton>
                </sdk:TreeViewItem>
                <sdk:TreeViewItem Header="TreeViewItemB">
                    <sdk:TreeViewItem Header="TreeViewItemC" IsEnabled="False"></sdk:TreeViewItem>
                </sdk:TreeViewItem>
            </sdk:TreeViewItem>
        </sdk:TreeView>
 
        <sdk:TreeView  x:Name="treeView" Grid.Column="2" SelectedItemChanged="treeView_SelectedItemChanged"/>
      
        <TextBlock x:Name="tb1" Text="所选项:" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="1"></TextBlock>
        <ContentControl x:Name="SelectedItem" FontWeight="Bold" Grid.Column="2" Grid.Row="1" VerticalAlignment="Center" />
        <TextBlock x:Name="tb2" Text="所选值:" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="2"></TextBlock>
        <ContentControl x:Name="SelectedValue" FontWeight="Bold" VerticalAlignment="Center"  Grid.Column="2" Grid.Row="2"/>
 
        <CheckBox x:Name="cbExpandAll" Grid.Column="1" Grid.Row="1"  Content="IsExpand" Checked="cbExpandAll_Checked"></CheckBox>
    </Grid>
</UserControl>

2.TreeViewSample.cs

View Code
public partial class TreeViewSample : UserControl
    {
        public TreeViewSample()
        {
            InitializeComponent();
 
    //动态节点
            this.AddTreeNode(0,null);
        }
 
        private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            TreeView view = sender as TreeView;
        }
 
        private void cbExpandAll_Checked(object sender, RoutedEventArgs e)
        {
         
                this.ti1.IsExpanded = true;
                this.ti2.IsExpanded = true;
            
        }
 
        IList<Area> areaList = new Area().DataSource();
 
    //动态添加节点
 
        private void AddTreeNode(int parentID, TreeViewItem treeViewItem) 
        {
            IList<Area> tree = (from li in areaList
                                where li.ParentID == parentID
                                select li
                                  ).ToList<Area>();
 
            if (tree.Count > 0)
            {
                foreach (Area area in tree)
                {
                    TreeViewItem objTreeNode = new TreeViewItem();
                    objTreeNode.Header = area.Name;
                    objTreeNode.DataContext = area;
                    objTreeNode.IsExpanded = true;
 
                    if (treeViewItem == null)
                    {
                        treeView.Items.Add(objTreeNode);
                    }
                    else
                    {
                        treeViewItem.Items.Add(objTreeNode);
                    }
                    AddTreeNode(area.AreaID, objTreeNode);
                }
            }
        }
 
         }

3.实体

View Code
 public class Area
    {
        #region AreaID
 
        /// <summary>
        /// Field:AreaID 地区ID
        /// </summary>
        public virtual int AreaID { get; set; }
 
        #endregion
 
        #region ParentID
 
        /// <summary>
        /// Field:ParentID 父地区ID
        /// </summary>
        public virtual int ParentID { get; set; }
 
        #endregion
 
        #region Name
 
        /// <summary>
        /// Field:Name 地区名
        /// </summary>
        public virtual string Name { get; set; }
 
        #endregion
 
        public IList<Area> DataSource()
        {
            IList<Area> list = new List<Area>();
 
            list.Add(new Area() { AreaID = 1, ParentID = 0, Name = "地球" });
            list.Add(new Area() { AreaID = 2, ParentID = 1, Name = "中国" });
            list.Add(new Area() { AreaID = 3, ParentID = 1, Name = "韩国" });
            list.Add(new Area() { AreaID = 4, ParentID = 1, Name = "美国" });
            list.Add(new Area() { AreaID = 5, ParentID = 2, Name = "北京" });
            list.Add(new Area() { AreaID = 6, ParentID = 2, Name = "上海" });
            list.Add(new Area() { AreaID = 7, ParentID = 2, Name = "山西" });
            list.Add(new Area() { AreaID = 8, ParentID = 7, Name = "太原" });
            list.Add(new Area() { AreaID = 9, ParentID = 7, Name = "忻州" }); 
            list.Add(new Area() { AreaID = 10, ParentID = 9, Name = "神驰" });
            list.Add(new Area() { AreaID = 11, ParentID = 3, Name = "首尔" });
            list.Add(new Area() { AreaID = 12, ParentID = 3, Name = "釜山" });
            list.Add(new Area() { AreaID = 13, ParentID = 3, Name = "济州" });
            list.Add(new Area() { AreaID = 14, ParentID = 13, Name = "济州岛" });
            list.Add(new Area() { AreaID = 15, ParentID = 4, Name = "纽约" });
 
            return list;
        }
    }

 

HierarchicalDataTemplate使用的例子

View Code
 <UserControl.Resources>
        <sdk:HierarchicalDataTemplate x:Key="CityTemplate">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
            </StackPanel>
        </sdk:HierarchicalDataTemplate>
        <sdk:HierarchicalDataTemplate x:Key="ProvinceTemplate" ItemsSource="{Binding Citys}" 
                                      ItemTemplate="{StaticResource CityTemplate}">
            <StackPanel>
                <TextBlock Text="{Binding Name}" Foreground="Green"/>
            </StackPanel>
        </sdk:HierarchicalDataTemplate>
        <sdk:HierarchicalDataTemplate x:Key="CountryTemplate" ItemsSource="{Binding Privinces}" 
                                      ItemTemplate="{StaticResource ProvinceTemplate}">
            <TextBlock Text="{Binding Name}" Foreground="Blue"/>
        </sdk:HierarchicalDataTemplate>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" >

        <sdk:TreeView x:Name="tvDemo" ItemTemplate="{StaticResource CountryTemplate}">

        </sdk:TreeView>

后台

View Code
  public MainPage()
        {
            InitializeComponent();
            tvDemo.ItemsSource = new ObservableCollection<Country> { 
              new Country { 
                  Name = "中国", 
                  Privinces = { new Province 
                    { 
                      Name="山东省",
                      Citys = { 
                          new City { Name = "济南市" },
                          new City { Name= "淄博市" }
                     }
                   },
                 new Province 
                   { 
                     Name="广东省", 
                     Citys = { 
                         new City { Name = "广州市" },
                         new City { Name= "佛山市" }
                     }
                   }
                }
            },
             new Country { 
                 Name = "加拿大", 
                Privinces = { new Province 
                  { 
                     Name="哥伦比亚省",
                     Citys = { 
                         new City { Name = "温哥华市" },
                         new City { Name= "维多利亚市" }
                     }
                   },
                 new Province 
                   { 
                     Name="阿尔伯塔省", 
                     Citys = { 
                         new City { Name = "埃德蒙顿市" },
                         new City { Name= "卡尔加里市" }
                     }
                   }
               }            }
         };
        }
    }
    public class Country
    {
        public Country()
        {
            Privinces = new ObservableCollection<Province>();
        }

        public string Name { get; set; }
        public ObservableCollection<Province> Privinces { get; set; }
    }

    public class Province
    {
        public Province()
        {
            Citys = new ObservableCollection<City>();
        }

        public string Name { get; set; }
        public ObservableCollection<City> Citys { get; set; }
    }

    public class City
    {
        public string Name { get; set; }
    }
}

 

 

 

posted on 2013-05-13 10:56  aking96  阅读(273)  评论(0编辑  收藏  举报