WPF:使用CommandManager.InvalidateRequerySuggested手动更新Command状态
摘要: WPF判断命令(Command)是否能够执行是通过ICommand.CanExecute事件,在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码,但是这个CanExecute事件的调用是由WPF控制的,有些时候,比如命令执行后进行一些异步耗时操作,操作完成后会影响CanExecute事件结果,但是WPF不会立即做出反应,那么这个时侯就需要手动调用CommandManager.InvalidateRequerySuggested对命令系统进行一次刷新。 比如下面这个小程序<Window.CommandBindings><CommandBindin
阅读全文
.NET(C#):中StringBuilder, List<T>, MemoryStream 容量(Capacity属性)的变化
摘要: 今天看了一道微软认证MCTS的样题,考的是StringBuilder容量(Capacity属性)的变化,晕……连这种题都有啊,呵呵,不过挺有意思的,为此我研究了一下一些常见的有Capacity属性的容器,也就是题目上说的那三个,另外还有个ArrayList,不过它和List<T>工作原理一样,就没把他放在标题上。 下面是我的电脑测试结果: (32位,WinXP SP2家庭版,.NET Framework 3.5 SP1) StringBuilder16 32 64 128 256 512 1024List<T>0 4 8 16 3...
阅读全文
.NET(C#): 几段代码演示多个应用程序域工作的特性
摘要: 下面代码需要读者对.NET AppDomain和Remoting有一定了解。 1. 每一个AppDomain都保留自己加载程序集的静态字段成员 using System;using System.Text;using System.Collections.Generic;using System.Reflection;namespace Mgen.TTC{class Program{static int num = -3;static void Main(){Console.WriteLine("设置num为{0}", num = 17);var newDoma...
阅读全文
WPF:纯XAML支持预览的系统字体和颜色选择ComboBox
摘要: 最近写一个简单的文本编辑器,自然少不了字体和颜色选择功能,当然,这里的字体和颜色仅限于简易的在ComboBox或其他类似列表性质的选择器,而不是那种Font/Color/Dialog/Picker控件。我们先来看系统字体选择。 字体选择 WPF中System.Windows.Media.Fonts类可以返回系统字体信息(包括FontFamily和Typeface),我们直接利用它接着定义Data Template就可以,不过注意以下几点: ComboBox的ItemsPanel默认是StackPanel而不是Virtualizing...
阅读全文
.NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
摘要: 众所周知,XmlDocument可以进行XPath查询,但实际上这里所说的XPath查询仅限于没有命名空间(没有xmlns属性)的XML,一旦遇到有命名空间的XML,对应XPath查询都会无结果。 比如下面这个XML <a xmlns="mgen.cnblogs.com"><b>ccc</b></a> XPath查询/a/b会返回null,而如果没有xmlns的话,会返回节点b。 为什么会这样呢?MSDN的相应函数有解释(参考:http://msdn.microsoft.com/en-u...
阅读全文
.NET(C#):实现内存中字符串或byte[]的加解密
摘要: 这个其实并不难,今天一位朋友(.NET新手)让我帮他实现这种功能,而且最好让他不需要另外学习.NET中的密码学操作。于是写了如下程序:最重要的是两个函数Encrypt和Decrypt,分别执行加解密操作,使用MemoryStream来做CryptoStream的操作对象。使用者只需要记住加密前生成的加密密钥和初始向量(即Key和IV),使用这个Key和IV可以将byte[]进行加解密。至于字符串,用Encoding转换成byte[]就可以。 加密方式是AES,当然可以根据自己需求修改成其他加密算法 运行截图: 代码:using System;using Sys...
阅读全文
WPF:利用TextSearch类使ItemsControl成员具有文字信息
摘要: TextSearch类中的TextPath和Text附加属性可以使ItemsControl的成员具有文字信息,其中TextPath附加属性应用在ItemsControl上,Text附加属性应用在子成员上。 用在ComboBox中 首先设置ComboBox的IsEditable为True,接着用TextSearch.TextPath或TextSearch.Text附加属性就可以方便得指定编辑模式下成员要显示的文字,下面的演示代码:XML中保存一个人名和一个颜色字符串,利用TextSearch.TextPath使ComboBox选中选项后显示人名,同时可以根据用...
阅读全文
WPF:ItemsControl成员身份追踪(以ListBox为例)
摘要: WPF ItemsControl功能可谓空前强大(相对Windows Forms类似控件),其属性众多,同时完成某一特定功能实现方法也多种多样,从另一面也给人一种比较混乱的感觉,下面讲一些比较容易混淆的关于ItemsControl的成员身份的概念。 1: 当手动向Items属性添加数据的情况 注意这里手动是指没有用到数据绑定而是使用代码或者XAML向Items添加数据的情况。 首先ItemsControl.Items属性返回一个ItemCollection对象,这个ItemCollection类继承ICollection接口,因此Add函数是添加一个Object...
阅读全文
探索WPF程序的Visual Tree和Logical Tree并显示在TreeView中的方法
摘要: 曾经几度需要研究一下一些控件的内部Visual Tree和Logical Tree,于是临时写个函数,之后用完就删了,后来这种情况越来越频繁,于是这次索性好好写一下,以后可以重复利用,也把它发在博客上。 函数所执行的功能就是探索一个DependencyObject(主要由于VisualTreeHelper和LogicalTreeHelper的相应函数参数都是针对DependencyObject)的VisualTree和LogicalTree然后将所有结果存到TreeViewItem里,TreeViewItem的Header存的是完整类型名称(可以自定义显示其他信息)。代...
阅读全文
.NET(C#):理解值类型/引用类型,装箱/拆箱,Object类
摘要: 装箱/拆箱,值类型/引用类型 和 Object类,这些都是.NET程序员人人皆知且人人都应该掌握的概念。大多数人都对他们非常了解,可是和一些同行们交流时我发现一些细节其实很多人并不了解,尤其是它们结合讨论的情景,本文通过一些代码来阐述一些我知道的概念。 当然标题归标题,一门技术是很难真正做到“彻底了解”,本文也意在抛砖引玉。 目录 代码1:Object.Equals 代码2:Object.ReferenceEquals 代码3:再强化...
阅读全文
.NET(C#):CultureInfo中重要的InvariantCulture
摘要: CultureInfo简述 CultureInfo类位于System.Globalization命名空间内,这个类和这个命名空间许多人都不了解也认为不需要太多了解,实际上,你写的程序中会经常间接得使用这些类。 简单的说:当进行数字,日期时间,字符串匹配时,都会进行CultureInfo的操作,也就是不同的CultureInfo下,这些操作的结果可能会不一样。这里要介绍一下非常容易被忽视的InvariantCulture。 通过示例了解InvariantCulture 前面提到过,不同的CultureInfo会影...
阅读全文
.NET(C#):Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别
摘要: Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的。 这些函数大致可以分为四类:第一类:加载到Load Context内 Load Context: Load Context是所有动态加载程序集首选应该被加载到的地方。 它只能加载在AppDomain信息中的ApplicationBase目录以及附带的PrivateBinPath目录内的程序集(关于这两个目录:可以参考另一篇文章:http://www.cnblogs.com/mgen/archive/2011/05/02/203437...
阅读全文
.NET(C#): 小议CLR加载程序集时的目录探索
摘要: 探索根目录,AppDomainSetup CLR解析一个程序集会在一个根目录内进行搜索,整个探索过程又称Probing,这个根目录很显然就是当前包含当前程序集的目录,当然用户可以命令CLR不仅在根目录,而且在根目录下的子目录对程序集进行搜索,那么怎样得到当前程序集(更准确的说:是当前AppDomain)的所有探索目录呢? AppDomainSetup这个类存储着探索目录的信息,如下这个类的部分成员: ApplicationBase: string //根目录PrivateBinPath: string//子目录(相对形式) ...
阅读全文