WPF 基础知识总结(一)

XAML

XAML是WPF设计UI的语言,设计师使用XAML设计界面,完成后输出XAML代码交给程序员使用。

命名空间:

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

标签与运行时对象的关系:

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

x: 前缀:用于映射 XAML xmlns http://schemas.microsoft.com/winfx/2006/xaml

x:Class属性(Attribute):编译成C#代码后对应的类名,如果手动把该属性改成其他后台代码中不包含的类名称,编译后会自动生成该类。如果与后台代码的类名称相同则进行合并(后台代码中的类要用partial修饰)。

x:Key:为 ResourceDictionary 中的每个资源设置一个唯一的键。

x:Name:为运行时代码中存在的实例指定运行时对象名称。

x:Static:启用一个获取静态值的值引用,该静态值只能是一个 XAML 可设置属性。

x:Type:根据类型名称构造Type 引用。指定采用 Type 的属性 

XAML的树形结构:XAML都是一个树,有唯一根节点,通常为Window或Page。提供VisualTreeHelper和LogicTreeHelper两个帮助类用来查找或操作树。

XAML对象属性赋值语法:

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

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

标记扩展:

当需要为属性进行特殊类型的赋值时就需要使用标记扩展语法(如数据绑定或赋NULL值)。标记扩展语法:{Binding ElementName=Name1,Path=Value,Model=OneWay}。标记扩展是为属性赋值从MarkupExtension派生的类才能使用标记扩展语法来创建对象。
注意:标记扩展是可以嵌套的,并且标记扩展类均已Extension作为后缀,在XAML使用时可以省略。

WPF嵌套元素:采用iLIST或Idictionary的add方法或什么


附加属性
可用于多个控件。 需要指定类型名.属性名,实际转化为方法调用。

事件:

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

x:Code:

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

引入程序集命名空间:

首先需要把程序集引入到项目中,然后使用xmlns语法,引用程序集中的类时,使用<映射名称:类名称></映射名称:类名称>语法引用。

语法:xmlns:prefix="clr-namespace:Namespace;assembly=AssemblyName"

prefix:是希望在XAML标记中用于指示命名空间的XML前缀。例如,XAML语言使用的x前缀。通常情况下,使用.net中其他的类型,前缀使用sys,而使用当前项目中的类型,前缀会使用local命名。

Namespace:是完全限定的.net命名空间的名称。

AssemblyName:是声明类型的程序集,没有.dll扩展名。这个程序集必须在项目中引用。如果希望使用项目程序集,则可以忽略这一部分。

注释:

语法<!---->,注释不能嵌套,并且只能出现在开始标签和结束标签之间。

WPF使用windows,page(可导航),application作为顶级元素。

可以创建不适用XAML的WPF


WPF布局

布局原则

放置多个元素,在窗体中布置一个容器添加别的元素。

原则:1 不显示设定尺寸 2不适用屏幕坐标指定位置。 3 子元素共享可用空间。

核心布局面板

  • StackPanel 在纵向上或横向上排列元素,注意默认会自动充满横向空间和纵向空间,不会自动换行,通过Orientation控制排列方向。
  • WrapPanel 采用流式布局,通过Orientation控制流的方向,当到达行尾或列尾时可以实现自动换行。
  • DockPanel 可以设置内部元素的停靠方向,通过设置DockPanel.Dock设置子控件的停靠方向。
  • Canvas 可以进行绝对定位布局,通过设置Canvas.Left和Canvas.Top等定位元素,除非确定布局不会改变,否则尽量少使用Canvas布局。
  • Grid 以网格的形式对元素进行布局

容器修饰与封装

  • Border 装饰元素只能包含一段嵌套内容(通常是布局面板),并为其添加背景或在其周围添加边框(必须设置其BorderBrushBorderThickness属性才会显示边框效果)。
  • ScrollViewer 可以包含任何内容通常用于封装布局容器,使得面板可以滚动以查看超出当前显示范围的内容。

 Grid面板支持以下三种设置尺寸的方式:

  • 绝对设置尺寸方式:使用设备无关单位准确地设置尺寸,就是给实际的数字
  • 自动设置尺寸方式:值为Auto,取控件所需的最小值,每行和每列刚好满足需要
  • 按比例设置尺寸方式:按比例将空间分割到一组行和列中
  1. 设置100设备无关单位的绝对宽度:ColumnDefinition Width="100"
  2. 使用自动尺寸设置方式,需要使用Auto值
  3. 使用按比例尺寸设置方式,需要使用星号(*)

使用Row和Column附加属性在单元格中放置元素,附加属性RowSpan和ColumnSpan跨越多个单元格。

分隔条由GridSplitter类表示,通过添加GridSplitter对象,用户就可以改变行和列的尺寸。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值