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

摘要:
前边研究的是某控件嵌套某控件,这里相当于树嵌套树,但这里不能这么叫,树很特殊,它有一个分层数据模板:HierarchicalDataTemplate,现在来看如何使用,第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:(为方便看清语句,类直接写在主程序中)C#代码如下:usingSystem;usingSystem.Collections.G

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

前边研究的是某控件嵌套某控件,这里相当于树嵌套树,但这里不能这么叫,树很特殊,它有一个分层数据模板:HierarchicalDataTemplate,现在来看如何使用,
第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:
(为方便看清语句,类直接写在主程序中)
[WPF](小结4)TreeView的数据分层模板第2张[WPF](小结4)TreeView的数据分层模板第3张C#代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
using System.Collections.ObjectModel;//ObservableCollection命名空间
namespaceTreeviewWithHierarchical
{
    /// <summary>
    ///MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial classMainWindow : Window
    {
        publicMainWindow()
        {
            InitializeComponent();
        }
        //题目类
        classquestion
        {
            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;
            }
        }
        //选项类
        classchoseItem
        {
            public string ChoseName//选项名,比如:A,B,C,D之类
            { get; set; }
            public string ChoseContent//选项内容
            { get; set; }
        }
        ObservableCollection<question> Questions = new ObservableCollection<question>();//题目数组
        private void Window_Loaded(objectsender, 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;
        }
    }
}

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

[WPF](小结4)TreeView的数据分层模板第4张[WPF](小结4)TreeView的数据分层模板第5张主界面代码如下:
<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即可:
[WPF](小结4)TreeView的数据分层模板第6张[WPF](小结4)TreeView的数据分层模板第7张代码说明 Code
<DataTemplate  x:Key="myTreeViewGrid">
            <TreeViewItem Name="treeviewitem1" >
                <TreeViewItem.Header >......
                </TreeViewItem.Header>......
                <DataGrid ItemsSource="{Binding choseItems}"  >
                </DataGrid>
            </TreeViewItem>
</DataTemplate>

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

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

[WPF](小结4)TreeView的数据分层模板第9张[WPF](小结4)TreeView的数据分层模板第10张代码说明 Code
        <TreeView >
            <TreeViewItem Header="A">
                <TreeViewItem Header="a1" />
                <TreeViewItem Header="a2" />
            </TreeViewItem>
            <TreeViewItem Header="B">
                <TreeViewItem Header="b1" />
                <TreeViewItem Header="b2" />
            </TreeViewItem>
        </TreeView>

免责声明:文章转载自《[WPF](小结4)TreeView的数据分层模板》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在AutoCAD中生成贝塞尔曲线使用Innosetup制作安装包的一些技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DevExpress WPF应用界面开发入门教程

DXPrinting Library 提供了一种创建自定义打印报表的简单方法,这种方法基于称为打印链接的特殊打印程序。 DXPrinting Library 引入了几种类型的打印链接,每一种都设计用于呈现特定数据对象、创建报表以及导出和打印报表,您可以通过从LinkBase抽象类继承您的类来创建自定义打印链接。 DevExpress WPF v21.1高速...

WPF 打开文件 打开路径对话框

WPF调用WinForm中的 OpenFileDialog 和 FolderBrowserDialog 来实现响应的功能 OpenFileDialog openFileDialog = newOpenFileDialog(); openFileDialog.Title = "选择文件"; openFileD...

WPF笔记(1.2 Navigation导航)——Hello,WPF!

这一节是讲导航的。看了一遍,发现多不能实现,因为版本更新了,所以很多旧的语法不支持了,比如说,不再有NavigationApplication,仍然是Application,TextBlock容器的TextWrap属性改为TextingWrap,StartupUri指向"Page1.xaml"。只要WPFApplication(不是Browser)内展示P...

【转】WPF之DataGrid应用

前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨。网络上的解决方法太多,但也太杂。没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果。因此,把我学到的和大家分享一下,相信这篇文章会让你再很短的时间内学会DataGrid的大部分主要功能,而且很多难点都可以在里面找到解决方案。 由于涉及的应用...

WPF使用转换器(Converter)

1.作用:可以将源数据和目标数据之间进行特定的转化, 2.定义转换器,需要继承接口IValueConverter [ValueConversion(typeof(int), typeof(string))] public class ForeColorConverter : IValueConverter {...

WPF省市联动Binding

主要思路: 把省的ItemsSource绑定DataContext,然后给市的ItemsSource绑定到Element(省)的SelectedItem上 xaml 1 <Window x:Class="Demo.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/20...