随笔分类 - C# / WPF
摘要:一般事件的处理程序都放在界面后台,通过事件绑定可以把事件处理程序放在ViewModel中,实现界面和逻辑的解耦。
要使用事件绑定需要借助System.Windows.interactivity(安装了Blend就有),如果电脑上找不到,可以通过NuGet安装System.Windows.Interactivity.WPF。
阅读全文
摘要:WPF的命令实际上就是实现了ICommand接口的类,平时使用最多的是RoutedCommand类,还可以使用自定义命令。
自定义命令直接在命令目标上起作用,而不像RoutedCommand那样先在命令目标上激发出路由事件等外围控件捕捉到事件后再“翻过头来”对命令目标加以处理。
阅读全文
摘要:在使用自定义类型作为界面的数据源时,自定义类型需要自己实现INotifyPropertyChanged接口,一般会把INotifyPropertyChanged接口的实现放到一个基类中。
阅读全文
摘要:XAML绘图本身就是矢量的,支持各式各样的填充和效果,还可以添加滤镜。
XAML矢量图是借助Microsoft Expression Studio中的Design和Blend两个工具画出来的。
动画本质就是在一个时间段内对象位置、角度、颜色、透明度等属性值的连续变化,有些是对象自身的属性,有些则是图形变形的属性。变化即是运动,
WPF的动画也是一种运动,运动的主体就是各种UI元素,运动本身就是施加在UI元素上的一些Timeline派生类的实例。
阅读全文
摘要:WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源,每个界面元素都可以携带自己的资源并可被自己的子级元素共享。
每个WPF界面元素都有一个名为Resource的属性,其类型为ResourceDictionary(继承至FrameworkElement类)。
ResourceDictionary能够以键值对的形式存储资源,当要使用到某个资源的时候,使用键值对的形式获取资源对象。
在保存资源时,ResourceDictionary视资源对象为Object类型,使用资源时先要对资源对象进行类型转换,XAML编译器能够根据Attribute自动识别资源类型(类型不对就会抛出异常),在C#中需要手动对资源对象进行类型转换。
阅读全文
摘要:WPF的命令系统由几个基本要素构成:命令(Command)、命令源(Command Source)、命令目标(Command Target)、命令关联(Command Binding)。
基本元素之间的关系体现在使用命令的过程中,命令的使用大概分为如下几步:创建命令类、声明命令实例、指定命令的源、指定命令目标、设置命令关联。
阅读全文
摘要:事件的前身是消息(Message)。路由事件与直接事件的区别在于:直接事件激发时,发送者直接将消息通过事件订阅交送给事件响应者,事件响应者使用其事件处理器方法对事件的发生做出响应、驱动程序逻辑按客户需求运行;路由事件的事件拥有者和事件响应者之间则没有直接显式的订阅关系,事件的拥有者只负责激发事件,事件将由谁响应它并不知道,事件的响应者则安装有事件侦听器,针对某类事件进行侦听,当有此类事件传递至此时事件响应者就使用事件处理器来响应事件并决定事件是否可以继续传递。
阅读全文
摘要:.NET Framework中的属性又称为CLR属性(CLR,Common Language Runtime),既可以说CLR属性是private字段的安全访问包装(Get/Set方法),也可以说一个private字段在后台支持(back)一个CLR属性。
C#代码中的属性的编译结果是两个方法,再多实例方法也只有一个拷贝,CLR属性并不会增加内存的负担。属性仅仅是个语法糖衣(Syntax Sugar)。
阅读全文
摘要:Windows GUI运行的机理是使用消息(Mesage)来驱使程序向前运行,消息的主要来源是用户的操作(如单击鼠标、按下按钮),消息又会被Windows翻译并送达目标程序然后被程序所处理。程序是被来自UI的事件(即封装过的消息)驱使问前的,简称“消息驱动”或“事件驱动”。因为消息和事件大都来自于UI,所以统称它们为“UI驱动程序”。使用“UI驱动程序”开发程序是“为了GUI而GUI”、单纯地为了实现程序的GUI化,已经背离了程序的本质一一数据加算法。
WPF作为一种专门的展示层技术,华丽的外观和动画只是它的表层现象。WPF引入了Data Binding概念以及与之配套的Dependency Property系统和DataTemplate,帮助程序员把思维的重心固定在了逻辑层、让展示层永远处于逻辑层的从属地位。
阅读全文
摘要:程序的本质是“数据+算法”——用户输入原始数据,算法处理原始数据并得到结果数据。程序可以使用LED阵列、格式字符串、图形化用户界面(Graphic User Interface,GUI)将结果数据显示给用户,其中图形化用户界面最方便、直观。
阅读全文
摘要:“x命名空间”的x是映射XML命名空间时给它取的名字(取XAML的首字母),里面的成员(如xClass、x:Name)是专门写给XAML编译器看、用来引导XAML编译器把XAML代码编译成CLR代码的。
x命名空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,包含的类均与解析XAML语言相关,所以亦可称之为“XAML命名空间”。x命名空间里面的类能让程序员与XAML编译器沟通。
阅读全文
摘要:XAML使用标签来定义Ul元素(UIElement),每个标签对应NET Framework类库中的一个控件类。通过设置标签的Atribute,不但可以对标签所对应控件对象的Property进行赋值,还可以做一些额外的事件(如声明命名空间、指定类名等)。
阅读全文
摘要:XAML是一种由XML派生而来的语言,很多XML中的概念在XAML是通用的,使用标签声明一个元素(每个元素对应内存中的一个对象)时需要使用起始标签和终止标签,夹在起始标签和终止标签中的XAML代码表示是隶属于这个标签的内容。如果没有什么内容隶属于某个标签,则这个标签称为空标签。
阅读全文
