Melchior on CLR

FluentTreeView Part.5

递归高亮

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

FluentTreeView Part.4

这篇起我们正式开始实现FluentTreeView。先看看图片
FluentTreeView

TreeView左侧有一选择高亮,Item有一鼠标高亮。这两个高亮与整个TreeView一样宽。
再回想一下我们上一篇用Expander实现的TreeView,Item的缩进是如何实现的?

FluentTreeView Part.3

上一篇中我们用数据驱动界面的方式使用了TreeView。这一篇我们稍稍改一改TreeView的样式。把TreeView表示节点可以展开的小三角替换成Expander是个不错的开始。既能复习TreeView的可视化树,又避免步子太大扯到蛋。

FluentTreeView Part.1

ItemsControl

有时需要呈现一组逻辑上平级的控件,他们可以是一个列表,也可以是一个网格;可以横向排列,也可以纵向排列;数量可以固定,也可以按需加载;普通控件的组合无能为力。所以,我们需要新的工具。ItemsControl应运而生。

获取程序的编译时间

日常新需求

新的需求又来了。这次是程序在编译后6个月拒绝启动。BETA性质的软件都有类似的需求。但大部分软件要么是启动时检查更新,要么是联网判断是否过期。对于我们现在做的这个小工具太小题大做了。根据编译时间判断过期的需求看似奇葩,也是有点道理的。

C#

使用MSBuild编写构建脚本

背景

项目需求变更,需要从一份代码里编译出好几个不同的版本。编译和部署的复杂度都成指数增加,简单的Release构建搞不定了,写构建脚本迫在眉睫。

Build a (partial) self-contained WPF application

巨人的肩膀

新事物的产生总是与老事物有千丝万缕的联系。或是从中得到启发,或是对其全面改良。新事物的源头通常可以追溯到很久远的一些概念上。因此有了「站在巨人的肩膀上」 这样的说法。在程序设计里面,「巨人们的肩膀」 就是我们的应用程序使用的库了。踩在这些「巨人」们的肩膀上我们的程序才得以重见天日;为了实现一个库,有时候会使用到其他的库。我们所依赖的「巨人」又踩在了其他「巨人」的肩膀上,把依赖关系变成了树状结构,我们的程序处在根节点。

扯远了:)