递归高亮
先来修正选择高亮的问题吧。我更愿意图片中的效果称为递归高亮。递归高亮可以看作是子节点都处于非递归高亮状态。这么想的话实现起来应该非常容易。但我希望FluentTreeView能够更灵活一些。最好通过属性来切换高亮模式。
阅读全文先来修正选择高亮的问题吧。我更愿意图片中的效果称为递归高亮。递归高亮可以看作是子节点都处于非递归高亮状态。这么想的话实现起来应该非常容易。但我希望FluentTreeView能够更灵活一些。最好通过属性来切换高亮模式。
阅读全文这篇起我们正式开始实现FluentTreeView。先看看图片

TreeView左侧有一选择高亮,Item有一鼠标高亮。这两个高亮与整个TreeView一样宽。 再回想一下我们上一篇用Expander实现的TreeView,Item的缩进是如何实现的?
阅读全文上一篇中我们用数据驱动界面的方式使用了TreeView。这一篇我们稍稍改一改TreeView的样式。把TreeView表示节点可以展开的小三角替换成Expander是个不错的开始。既能复习TreeView的可视化树,又避免步子太大扯到蛋。
阅读全文上次说到了TreeView具有递归的结构,而在WPF中是数据驱动界面,这就要求我们的数据源也具有一定的递归结构
按照数据源是否可以继续展开下去,我们将数据源定义为两个ViewModel:TreeNodeVM,TreeLeafVM,其中TreeNodeVM作为树的中间节点出现,其下可继续出现中间节点和叶子节点,TreeLeafVM作为树的叶子节点出现,不能再出现其他节点。TreeNodeVM中的子节点的个数是不定的,所以应该由集合表示。而TreeNodeVM的子节点可能是TreeNodeVM和TreeLeafVM的任意一种,这就需要他们有一个公共的父类。这给我们如下的数据定义:
有时需要呈现一组逻辑上平级的控件,他们可以是一个列表,也可以是一个网格;可以横向排列,也可以纵向排列;数量可以固定,也可以按需加载;普通控件的组合无能为力。所以,我们需要新的工具。ItemsControl应运而生。