[WPF](小结3)DataGridInTreeView树嵌表

摘要:
树嵌表格,也算是创新了,展开树时Show出表格,好象不太习惯,WPF就是在这方面比较强大,啥组合都弄得出来,好了操作步骤:第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:(为方便看清语句,类直接写在主程序中)C#代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq

[WPF](小结3)DataGridInTreeView树嵌表第1张

树嵌表格,也算是创新了,展开树时Show出表格,好象不太习惯,WPF就是在这方面比较强大,啥组合都弄得出来,好了操作步骤:
第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下:
(为方便看清语句,类直接写在主程序中)
[WPF](小结3)DataGridInTreeView树嵌表第2张[WPF](小结3)DataGridInTreeView树嵌表第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命名空间
namespaceDataGridInTree
{
    /// <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_1(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](小结3)DataGridInTreeView树嵌表第4张[WPF](小结3)DataGridInTreeView树嵌表第5张主界面代码如下:
<Window x:Class="DataGridInTree.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="DataGridInTreeView" Height="350" Width="525" Loaded="Window_Loaded_1">
    <Window.Resources >
        <DataTemplate  x:Key="myTreeViewGrid">
            <TreeViewItem Name="treeviewitem1" >
                <TreeViewItem.Header >
                    <StackPanel Orientation="Horizontal" >
                        <CheckBox IsChecked="False" />
                        <TextBlock Margin="3" Text="{Binding questionID}"/>
                        <Image Source="png.png" Width="24" Height="24" />
                        <TextBlock Margin="3" Text="{Binding questionName}" />
                    </StackPanel>
                </TreeViewItem.Header>
                <DataGrid ItemsSource="{Binding choseItems}" AutoGenerateColumns="False"CanUserSortColumns="False" Margin="5" >
                    <DataGrid.Columns >
                        <DataGridTextColumn Header="选项名" Binding="{Binding ChoseName}" IsReadOnly="True" />
                        <DataGridTextColumn Header="选项内容" Binding="{Binding ChoseContent}" IsReadOnly="True" />
                    </DataGrid.Columns>
                </DataGrid>
            </TreeViewItem>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView Name="treeview1" Margin="5" HorizontalContentAlignment="Stretch"ItemTemplate="{StaticResource  myTreeViewGrid}" />
    </Grid>
</Window>
第三:小结一下:
1:TreeView本身有一个分层数据模板,试了没有弄成,后来一想这里不是分层,而是树嵌套表,应该是两码事,所以直接设置TreeViewItem即可,
2:WPF因为设计思路的新颖性,控件嵌套有点随心所欲,弄出很多怪怪的界面,还真不好适应.

免责声明:文章转载自《[WPF](小结3)DataGridInTreeView树嵌表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS7下载与安装错误全记录我是如何让minio client上传速度提高几十倍的下篇

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

相关文章

WPF 自定义滚动条(ScrollView、ScrollBar)样式【转载】

一、滚动条基本样式 本次修改Scrollview及ScrollBar滚动条样式是通过纯样式实现的。修改的内容包含滚动条的颜色,上下按钮的隐藏。另外添加了鼠标经过滚动条动画。 style样式如下: <!-- ScrollViewer 滚动条 --> <Style x:Key="ScrollBarThumb" TargetType="...

WPF实现消息提醒(广告弹窗)

1.先上效果图: 2.1t提示框界面。 主窗口界面没什么内容,就放了一个触发按钮。先绘制通知窗口(一个关闭按钮,俩个文本控件),可以设置下ResizeMode="NoResize" WindowStyle="None"   Topmost="True", 去掉窗口标题,并使提示窗口始终处于最上层。 <Border BorderThickness="...

WPF使用转换器(Converter)

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

WPF 任务栏图标闪烁提醒

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.InteropServices; 5 using System.Text; 6 using System.Windows; 7 usin...

WPF 附加属性的用法 (一)

public class MDCTest { public static DependencyProperty MouseDoubleClickCommandProperty = DependencyProperty.RegisterAttached( "MouseDoubleClick",...

wpf prism加载独立模块实例

一、首先看看文件的组织架构 module1 module2生成dll某块。Shell来显示管理模块 二,看看关键bootstrapper类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tas...