WPF 学习笔记(一)

XAML是WPF技术中专门用于设计UI的语言,设计师直接使用XAML设计界面,设计完成后输出XAML代码交给程序员直接使用。

XAML是一种由XML派生而来的语言,所以会继承XML中的一些概念。
命名空间:

命名空间为避免标签的名称冲突而出现,可以把来自不同程序集中的类映射到自定义的命名空间前缀,使用语法xmlns[:可选的映射前缀]=”名称空间和程序集”。没有映射前缀的命名空间为默认命名空间,默认命名空间只能有一个。命名空间映射一般写在根标签上。
标签与运行时对象的关系:

在XAML中的每个标签对应运行时中的一个对象,标签的包含关系也对应运行时中对象的包含关系。大多数标签的属性(Attribute)对应运行时对象的属性(Property)。
x:Class属性(Attribute):

这个属性(Attribute)并不对应到运行时对象的属性(Property),Class属性用来说明XAML编译成C#代码后对应的类名,如果手动把该属性改成其他后台代码中不包含的类名称,编译后会自动生成该类。如果与后台代码的类名称相同则进行合并(后台代码中的类要用partial修饰)。
XAML的树形结构:

每个XAML都是一个树,有唯一的一个根节点,通常为Window或Page。这种树形结构对整个WPF系统意义重大,包括属性系统、数据绑定、事件路由都依赖于这棵树。类库中提供VisualTreeHelper和LogicTreeHelper两个帮助类用来查找或操作树。
XAML对象属性赋值语法:
XAML是一种声明性语言,XAML编译器会为每一个标签创建与之对应的对象。对象创建后对它的属性进行必要的初始化之后才有意义。因为XAML语言不能编写程序的运行逻辑,所以一份XAML文档除了使用标签声明对象就是初始化对象的属性。
XAML中为对象属性赋值共有两种方法:
使用字符串进行简单赋值
使用属性元素进行复杂赋值

使用标签的Attribute语法通过字符串为对象属性进行简单赋值。如果系统中没有内置的转换时需要使用TypeConverter类将标签的Attribute与对象的Property进行映射。创建继承自TypeConverter的类并重写ConvertFrom方法并在需要应用该转换的类上应用TypeConverterAttribute属性。

属性元素语法,如果复杂属性无法通过简单字符串赋值时,可以通过使用属性元素语法为属性赋值

如果要赋值的属性为元素的默认内容,则可以省略“元素名称.属性名称”这个标签。
标记扩展:

标记扩展是一种特殊的Attribute=value语法,当需要为属性进行特殊类型的赋值时就需要使用标记扩展语法(如数据绑定或赋NULL值)。标记扩展语法:{Binding ElementName=Name1,Path=Value,Model=OneWay},对象的数据类型为紧邻左侧花括号的字符串,对象的属性初始化为以逗号分隔的键值对字符串,值不需要使用引号。标记扩展是为属性赋值,完全可以使用属性元素的语法代替标记扩展为属性赋值。标记扩展可以使用一些简化的语法,在类型名称后可以直接跟属性名而不用写属性值(不用写键值对的形式),这会直接调用类型的包含参数的构造函数,属性值的前后顺序与构造函数相同,如{Binding Name1 ,Path=Value,Model=OneWay}。并不是所有的对象都支持标记扩展语法,只有从MarkupExtension派生的类才能使用标记扩展语法来创建对象。
注意:标记扩展是可以嵌套的,并且标记扩展类均已Extension作为后缀,在XAML使用时可以省略。

事件:

除了使用Attribute语法给对象属性赋值外,还可以为对象(控件)关联事件。通过将事件处理函数的名称放到Attribute的值字符串中为事件指定处理器。
x:Code:

该标签可以将C#后置代码写到XAML文件中,代码内容一定要用xml语言的

<x:Code>
          <![CDATA[
         private void Page_Loaded(object sender, RoutedEventArgs e)
        {

        }
             ]]>
 </x:Code>

引入程序集命名空间:

首先需要把程序集引入到项目中,然后使用xmlns语法,引用程序集中的类时,使用xlmns:映射名=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”语法引用。
假设我的类库程序集名为MyLibrary.dll其中包含Common这个命名空间。那么它在XAML中的引用语法是:
xmlns:common=”cle-namespace:Common;assembly=MyLibrary”

注释:
注释不能嵌套,并且只能出现在开始标签和结束标签之间。

Adorner是WPF中一种特殊的视觉元素,可以用于在其他元素上添加装饰或者附加功能。Adorner通常用于实现在用户界面上的一些特殊效果,比如鼠标悬停提示、错误提示、操作提示等。 Adorner需要继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。Adorner类中有一个AdornedElement属性,用于获取被装饰的元素。 Adorner类中有一个OnRender方法,用于绘制Adorner的外观。在OnRender方法中可以使用DrawingContext来绘制Adorner的外观,也可以使用VisualBrush来填充Adorner的内容。 Adorner的使用方法: 1. 创建一个Adorner类,继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。 2. 重写Adorner类的OnRender方法,用于绘制Adorner的外观。 3. 在需要装饰的元素上调用AdornerLayer.GetAdornerLayer方法获取AdornerLayer对象。 4. 调用AdornerLayer的Add方法,将Adorner添加到AdornerLayer中。 下面是一个简单的例子: ```csharp public class MyAdorner : Adorner { public MyAdorner(UIElement adornedElement) : base(adornedElement) { } protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); // 绘制Adorner的外观 drawingContext.DrawEllipse(Brushes.Red, null, new Point(AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2), AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2); } } // 在需要装饰的元素上添加Adorner var adornedElement = new Button { Content = "Click me!" }; var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); var myAdorner = new MyAdorner(adornedElement); adornerLayer.Add(myAdorner); ``` 这个例子中,我们创建了一个MyAdorner类,继承自Adorner类,并重写了OnRender方法,在OnRender方法中绘制了一个红色的圆形。然后我们创建了一个Button元素,并将其作为参数传递给MyAdorner的构造函数,创建了一个AdornerLayer对象,并调用Add方法将MyAdorner添加到AdornerLayer中,从而实现了在Button元素上添加了一个红色的圆形装饰器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值