记录一下工作中遇到的问题,以便以后忘记了可以来看.

在工作中遇到一个问题,就是要实现类型如下的界面,没有使用Telerik和Dev库。本来最开始是想使用Datagrid,但不知道怎么实现treeview,后来遍使用treeview。

前端xaml代码:

<TreeView x:Name="mytreeview">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding level,Converter={StaticResource LevelToWidthConverter}}"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Content}"/>
<CheckBox IsChecked="{Binding IsChecked}"
Grid.Column="1"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

其中下面的用于控制文字和Checkbox之间的距离。

<ColumnDefinition Width="{Binding level,Converter={StaticResource LevelToWidthConverter}}"/>

后台代码:

private void InitDatabase()
{
List<MyTreeview> lists = new List<MyTreeview>();
MyTreeview node = new MyTreeview("分类", false, 0);
MyTreeview node1 = new MyTreeview("水果", false,1);
MyTreeview node2 = new MyTreeview("颜色", false, 1);
MyTreeview node3 = new MyTreeview("蔬菜", false, 1);
MyTreeview node4 = new MyTreeview("苹果", false, 2);
MyTreeview node5 = new MyTreeview("红色", false, 2);
MyTreeview node6 = new MyTreeview("绿色", false, 2);
MyTreeview node7 = new MyTreeview("西红柿", false, 2);

node1.Nodes.Add(node4);
node2.Nodes.Add(node5);
node2.Nodes.Add(node6);
node3.Nodes.Add(node7);
node.Nodes.Add(node1);
node.Nodes.Add(node2);
node.Nodes.Add(node3);
lists.Add(node);
mytreeview.ItemsSource = lists;
}
}

public class MyTreeview:INotifyPropertyChanged
{
public MyTreeview(string Content,bool IsChecked,int level)
{
this.Content = Content;
this.IsChecked = IsChecked;
this.level = level;
Nodes = new List<MyTreeview>();
}

public string Content { get; set; }

public bool IsChecked { get; set; }

public int level { get; set; }

public List<MyTreeview> Nodes { get; set; }

public event PropertyChangedEventHandler PropertyChanged;
}

宽度转换:

public class LevelToWidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || (int)value == 0)
return 200;
return 200 - (int)value * 20;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

WPF treeview扩展的更多相关文章

  1. WPF TreeView SelectedItemChanged called twice

    How to avoid WPF TreeView SelectedItemChanged being called twice Very often, we need to execute some ...

  2. WPF TreeView HierarchicalDataTemplate

    原文 WPF TreeView HierarchicalDataTemplate HierarchicalDataTemplate 的DataType是本层的绑定,而ItemsSource是绑定下层的 ...

  3. WPF TreeView Indent 减少节点的缩进

    www.swack.cn - 原文链接:WPF TreeView Indent 减少节点的缩进 问题 最近一个需求,需要在界面中实现Windows资源管理器TreeView的界面.但是我发现,我做出的 ...

  4. WPF TreeView的使用

    WPF提供了treeView控件,利用该控件开发者可以将数据分层显示在树结构中.当然其中需要用到Binding的机制,有用的类包括:ObjectDataProvider.DataTemplate.Hi ...

  5. 2.6 wpf标记扩展

    1.什么是标记扩展?为什么要有标记扩展? 标记扩展是扩展xmal的表达能力 为了克服现存的类型转换机制存在的 常用的标记扩展有如下: x:Array 代表一个.net数组,它的子元素都是数组元素.它必 ...

  6. WPF TreeView 虚拟化-设置滚动到选中项

    前言 列表滚动到具体的数据项? ListBox提供了简易快捷的滚动定位函数ScrollIntoView. TreeView树状结构列表,则没有此类方法,无法与ListBox一样,直接设置滚动到具体的数 ...

  7. 【原创】WPF TreeView带连接线样式的优化(WinFrom风格)

    一.前言 之前查找WPF相关资料的时候,发现国外网站有一个TreeView控件的样式,是WinFrom风格的,样式如下,文章链接:https://www.codeproject.com/tips/67 ...

  8. wpf TreeView

    <Window x:Class="WpfTutorialSamples.TreeView_control.TreeViewDataBindingSample"        ...

  9. WPF TreeView绑定字典集合

    <TreeView Name="Tree" HorizontalAlignment="Left" Height="269" Width ...

随机推荐

  1. NancyFX 第十一章 Bootstrapping

    本章我们将深入Nancy的内部,对Nancy的内部组件进行修改和调整. 那什么是bootstrap哪?字典里是这么介绍的: 一般而言,处于引导中(bootstrapping)是在终端用户可以使用之前开 ...

  2. QT自定义控件插件化简要概述

    1.选择 "其他项目"->"Qt4 设计师自定义控件" **最好选中所有的编译器平台,由于目前使用的Qt Creator是MSVC2015 32位,因此要 ...

  3. sys模块和序列化模块

    import sysprint(sys.version) #查看当前pycharm版本print(sys.path )#返回模块的搜索路径print(sys.platform )#返回操作系统的版本p ...

  4. 封装Jquery 合并table中任何同列数据

    封装代码: jQuery.fn.rowspan = function (colIdx) { //封装JQuery同列值相同合并小插件 return this.each(function () { va ...

  5. ubuntu下cmake 使用clang

    安装llvm.clang sudo apt-get install llvm clang clang命令会在/usr/bin/clang cmake配置交叉编译链 建立linux.toolchain. ...

  6. Java 8 中 ConcurrentHashMap工作原理的要点分析

    简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了对不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这 ...

  7. ASP.NET Core 2.0 : 七.一张图看透启动背后的秘密

    为什么我们可以在Startup这个 “孤零零的” 类中配置依赖注入和管道? 它是什么时候被实例化并且调用的? 参数中的IServiceCollection services是怎么来的? 处理管道是怎么 ...

  8. 使用python读取word,写入execl

    word里面有2张表,需要找到第二张表,并写入execl中: 代码如下: #coding:utf-8 import os from docx import Document import win32c ...

  9. Problems at works

    1.ssh无法连接服务器:因部署ftp服务,误将/var目录的所有者和所属组改成了ftp,以致于SSH无法二次连接: 2.集群服务器的hadoop的datanode节点死亡,在对应节点拉起即可.若无法 ...

  10. 第一把机械键盘 ikbc C-87

    终于入了机械键盘,ikbc C-87黑色红轴. 原本上周五晚上就到了,但是那个键盘有几个键弹起后弹簧会持续响,敲了一会,实在不能忍受,就申请换货了.新换的键盘今天终于到了,没有了之前的问题,但是几乎每 ...