zoukankan      html  css  js  c++  java
  • WPF(小结4)TreeView的数据分层模板

    [WPF](小结4)TreeView的数据分层模板

    时间:2012-06-13 20:15来源:博客园 作者:小颗豆 点击:220次
    前边研究的是某控件嵌套某控件,这里相当于树嵌套树,但这里不能这么叫,树很特殊,它有一个分层数据模板:HierarchicalDataTemplate,现在来看如何使用, 第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下: (为方便看清语句,类直接写在主程序中) using System; using System
      

      

      前边研究的是某控件嵌套某控件,这里相当于树嵌套树,但这里不能这么叫,树很特殊,它有一个分层数据模板:HierarchicalDataTemplate,现在来看如何使用,

      第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:

      (为方便看清语句,类直接写在主程序中)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Collections.ObjectModel;//ObservableCollection命名空间
    namespace TreeviewWithHierarchical
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            //题目类
            class question
            {
                public Int32 questionID//题目ID号
                { get; set; }
                public string questionName//题目名,比如:第1题或第2题等
                { get; set; }
                public ObservableCollection<choseItem> choseItems//某题中"选项类"的集合,比如A-D
                { get; set; }
                public question(Int32 _id, string _questionname, ObservableCollection<choseItem> _choseitems)//构造函数
                {
                    questionID = _id;
                    questionName = _questionname;
                    choseItems = _choseitems;
                }
            }
            //选项类
            class choseItem
            {
                public string ChoseName//选项名,比如:A,B,C,D之类
                { get; set; }
                public string ChoseContent//选项内容
                { get; set; }
            }
            ObservableCollection<question> Questions = new ObservableCollection<question>();//题目数组
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                string[] CharStr = new string[4] { "A", "B", "C", "D" };
                for (int i = 0; i < 5; i++)
                {
                    ObservableCollection<choseItem> ChoseItems = new ObservableCollection<choseItem>();//选项数组               
                    for (int j = 0; j < 4; j++)
                    {
                        choseItem item = new choseItem();//选项类
                        item.ChoseName = CharStr[j] + ":";
                        item.ChoseContent = "选项内容举例...";
                        ChoseItems.Add(item);
                    }
                    Questions.Add(new question(i, "__第" + (i + 1).ToString() + "", ChoseItems));
                }
                treeview1.ItemsSource = Questions;
            }
        }
    }

      第二步:主界面的绑定语句如下:

    <Window x:Class="TreeviewWithHierarchical.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="TreeviewWithHierarchical" Height="350" Width="525" Loaded="Window_Loaded">
        <Window.Resources >
            <!-- TreeView分层数据模板-->
            <HierarchicalDataTemplate ItemsSource="{Binding choseItems}" x:Key="myTreeviewWithHierarchical">
                <StackPanel Orientation="Horizontal" >
                    <CheckBox Margin="3" IsChecked="False" />
                    <Image Source="question2.png" Width="24" Height="24" />
                    <TextBlock Margin="3" Text="{Binding questionName}" />
                </StackPanel>
                <HierarchicalDataTemplate.ItemTemplate >
                    <DataTemplate >
                        <Border Margin="3" BorderBrush="Blue" BorderThickness="1" CornerRadius="3" >
                            <StackPanel Orientation="Horizontal" >
                                <TextBlock Margin="3" Text="选项名:" />
                                <TextBlock Margin="3" Text="{Binding ChoseName}" />
                                <TextBlock Margin="3" Text="内容:" />
                                <TextBlock Margin="3" Text="{Binding ChoseContent}" />
                            </StackPanel>
                        </Border>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </Window.Resources>
       
        <Grid>
            <TreeView Name="treeview1" Margin="5" ItemTemplate="{StaticResource myTreeviewWithHierarchical}" />
        </Grid>
    </Window>

      第三:小结

      1:TreeView可以使用分层数据模板HierarchicalDataTemplate,也可以不使用,根据不同的情况来进行选择

      比如前边的例子直接操作TreeViewItem即可:

    <DataTemplate  x:Key="myTreeViewGrid">
                <TreeViewItem Name="treeviewitem1" >
                    <TreeViewItem.Header >
       ......
                    </TreeViewItem.Header>
       ......
                    <DataGrid ItemsSource="{Binding choseItems}"  >
                    </DataGrid>
                </TreeViewItem>
    </DataTemplate>

      2:最简单的情形是直接使用TreeView的TreeViewItem作为节点,比如:

      

            <TreeView >
                <TreeViewItem Header="A">
                    <TreeViewItem Header="a1" />
                    <TreeViewItem Header="a2" />
                </TreeViewItem>
                <TreeViewItem Header="B">
                    <TreeViewItem Header="b1" />
                    <TreeViewItem Header="b2" />
                </TreeViewItem>
            </TreeView>

      本文来自小颗豆的博客,原文地址:http://www.cnblogs.com/dooroo/archive/2012/06/12/ListBoxInListBox.html

  • 相关阅读:
    Navigator is deprecated and has been removed from this package
    ES6 Promise
    SectionList的使用
    FastList使用
    react native touchable
    react native获取屏幕的宽度和高度
    RN导航栏使用
    2020-11-04:java里,总体说一下集合框架。
    2020-11-03:手写代码:链表如何快速找到中间节点?
    2020-11-02:go中,s:=make([]string,10);s=append(s,“test“);fmt.Println(s[0]),打印什么?
  • 原文地址:https://www.cnblogs.com/swarb/p/9924369.html
Copyright © 2011-2022 走看看