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

在工作中遇到一个问题,就是要实现类型如下的界面,没有使用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. java设计模式-----14、桥接模式

    Bridge 模式又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction ...

  2. SQL Server将自己的查询结果作为待查询数据子列之一

    嵌套子查询是SQL语句中比较常用的一种查询方法,开发过程中遇到查询需要将自己的某列作为待查询的数据,在参考别人的SQL语句的写法终于实现了自己需要的功能. 查询语句如下: SELECT DISTINC ...

  3. 简单探讨 javascript 闭包

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个对Array的求和.通常情况下,求和的函数是这样定义的: function sum(arr) { ret ...

  4. MongoDB 桌面管理器MongoVUE

    MongoVUE是一个桌面GUI工具,专用于Windows平台,它有一个简洁.清爽的界面,它的基本功能是免费的.它可以以文本视图.树视图.表格视图来显示MongoDB的数据.还可以保持查询的结果供以后 ...

  5. C++中 Rand随机序列函数

    标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:           函数一:int rand(void): 从srand (seed ...

  6. adobe media encoder cc 2015在win10中打开崩溃的解决办法(该方法同样适用于adobe其他产品)

    今天就给大家讲讲adobe media encoder cc 2015启动的时候崩溃的问题,先来看看现象.就是这样了,然后我在网上找了很多办法,有的方法已经过时了,也或者因为现在新版本的adobe m ...

  7. Python功能键

    swapcase ,大小写翻转 title,每个单词首字母大写 upper,全部大写 lower,全小写 center,居中(可填充符号) lstrip,去除首尾空格斜杠符号 find,寻找出现的位数 ...

  8. 超实用的查看磁盘的命令:lsblk

  9. cesium 热力图

  10. WBS

    Need 需求分析: 为了满足中老年人因工作忙碌而无暇阅读的痛苦,我们设计推广出一款听书软件.可以给中老年人带来的好处是不再受繁琐的听书软件的束缚,操作简单,携带便捷. Approach 实现方法: ...