silverlight 中treeview初探

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; }

    }

}

 

 

 

你可能感兴趣的:(silverlight)