WPF 学习(一)

一、WPF先容

WPF全称 Windows Presentation Foundation,干啥用的?
主要是用来制作Windows桌面客户端软件的。
.Net平台下制作Windows桌面客户端软件主要有两个,一个Winform,另有一个就是WPF了。

事宜驱动时代:开发客户端便接纳Winform,可是界面逻辑跟营业逻辑交织在一起,其中的代码隐藏类还包罗了许多的事宜,这样的效果可想而知了,降低界面的渲染速率,而且代码不太容易维护。
数据驱动时代:微软便开发了专门针对数据的客户端,WPF便因此发生。现在许多网站也是接纳的数据驱动模式来开发的,好比国人尤大大开发的Vue,开发的时刻只需注重数据,dom操作Vue会给你优雅的自动完成。

Winform优瑕玷:
优点:简朴,易控制,不是太占内存的
瑕玷:代码耦合度高,不利于维护

WPF优瑕玷:
优点:支持MVVM模式,可以做出异常壮丽的界面,好比某60杀毒软件,某雷下载软件即是接纳这个开发出来的。
瑕玷:占用的内存稍微高些,学习成本较高,需要明白数据绑定,事宜绑定等较多观点。

二、XAML

干啥用的?很简朴,就是专门用来做软件界面的,类似于html语言,也是一种符号语言。
html中界说一个按钮

1.<button>按钮</button>  
2.<input type="button" value="按钮" />

xaml中界说一个按钮

1.<Button>按钮</Button> 
2.<Button Content="按钮" />  //将Button工具的属性Content通过特征(Attribute)来赋值
3.<Button>按钮</Button>
4.<Button>
      <Button.Content>按钮</Button.Content>  //将属性用作元素
  </Button> 

在这里有需要说明一下:
属性(Property)与特征(Attribute)是差别的。
属性是针对面向工具的,一个工具有哪些属性,好比车的颜色,轮胎等,即是所谓的属性。
至于特征,那是专门针对标签的。Property与Attribute并不完全映射的。大部分Attribute对应于 控件工具 的Property 一个标签,相当于在后台声明晰一个工具 意思就是,在后台声明晰一个Button工具。
也就是说,接下来的两段代码意思是一样的。

//使用xaml语言编写
<StackPanel>
      <Button Content="按钮" />
</StackPanel>
//在后置代码中编写
Button button=new Button();
button.Content="按钮";  //Content即是属性,而在标签中,则是特征(Attribute)
stackPanel.Children.Add(button);//在哪个位置添加按钮  StackPanel标签的Name名称

名称空间
WPF 学习(一)
其中第二行 xmlns声明的是WPF焦点名称空间。它包罗了所有WPF类,相比第三行,它没有使用前缀,也就是整个文档的默认名称空间。
第三行 是XAML名称空间。它包罗了种种XAML特征。相比第二行,它使用了前缀x。也就是说,可以通过前缀x来使用该名称空间。
x名称空间内里到底有什么呢?
x名称中主要含有符号扩展、特征跟XAML指令元素三大类。

名称 作用
x:Class 指明代码隐藏类,只能用于根节点
x:Key 常用在静态资源,通过Key来指定详细的某个静态资源
x:Name 跟标签中的Name特征效果险些一样
x:Code 在XAML中嵌入指令(险些不用)
…固然另有一些其他不常用到的,就不说了

在XAML中,我们可能会看到x:Name 跟Name,这两者效果是一样的,都是给响应的工具Name属性赋值。
其中,倒数第三行,声明晰第三方的控件名称,也就是说,我可以通过<pu:Button></pu:Button>前缀来使用第三方的控件。

栈 & 队列

你会发现,默认的名称空间,感受是个web中的URI,一开始,我也是这样以为是引用web服务器上的资源的。其实不然,微软这么做是因为schemas.com域就是他自己的,只有微软会使用它。

代码隐藏类(后置代码)
在代码声明中,你会发现 x:Class=”” 这个类即是代码隐藏类,和界面是绑定在一起的,原理是通过C# partial关键字实现的。在这个代码隐藏类里,我们可以写该界面所对应的相关事宜代码,但这样做容易导致界面代码跟营业逻辑代码耦合在一起(Winform即是云云),这并不是WPF设计的本意,WPF主要是凭据MVVM思想来设计的,通过数据绑定、事宜绑定来彻底星散前后端,前端只用xaml来写,代码隐藏类内里险些不写代码,按钮相关事宜写在ViewModel内里,这样做,高内聚低耦合,易维护易扩展。

三、结构

WPF结构模子也是一个重大改善。在WPF问世之前,结构都是接纳的坐标,就是位置是锁死的,不会凭据窗口的巨细自动调整。WPF结构接纳的是类似Web中的流结构,控件可以自动的随着窗口的巨细自动调整。
1、StackPanel 类似web中的flex结构
这个结构容器异常简朴,就是水平(垂直)放置各个控件。一维结构容器。

<StackPanel Orientation="Vertical">
      <Button Content="按钮1" />
      <Button Content="按钮2" />
      <Button Content="按钮3" />
      <StackPanel Orientation="Horizontal">
            <Button Content="按钮111" />
            <Button Content="按钮222" />
            <Button Content="按钮333" />
      </StackPanel>
</StackPanel>

图片:
WPF 学习(一)

2、Grid
这个结构容器异常壮大,二维结构容器。
它可以指定一个类似表格的,可以随便的界说几行几列。然后响应的控件可以指定放在这个容器的第几行第几列。

<Grid>
      <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Button Grid.Row="0" Grid.Column="0">按钮1</Button>
      <Button Grid.Row="0" Grid.Column="1">按钮2</Button>
      <Button Grid.Row="1" Grid.Column="0">按钮3</Button>
      <Button Grid.Row="1" Grid.Column="1">按钮4</Button>
</Grid>

备注:
其中,Button使用了Grid.Column,在Button类中是没有这个属性的,但它是从Grid容器附加的。Grid.Column即是附加属性
图片:
WPF 学习(一)

3、另有一些其他的结构容器:WrapPanel、DockPanel、Canvas等,暂不先容。
备注:
一样平常情况下,使用StackPannel跟Grid结构就够了,若是遇到庞大一点的情况下,结构容器相互嵌套便可以解决。

四、元素和控件

元素:不允许通过指定模板来定制外观

说明
Border 围绕单个控件的边框,可以指定Background、BorderBrush和BorderThickness
Viewbox 能够拉伸和缩放子元素
TextBlock 用于显示文本
RichTextBlock 显示富文本
Image 显示图像,支持jpeg、png、bmp、svg,也支持gif动画
另有一些其他的,暂不先容

控件:允许通过指定模板来定制外观,这也是WPF的壮大之处。
主要包罗局限控件、内容控件、按钮、项控件这几个大类。

控件 说明
TeetBox 用户可输入的文本
RichEditBox 允许输入格式化的文本
PasswordBox 用于输入密码
DatePicker
CalendarDatePicker
CalendarView
用户选择日期
TimePicker 用户输入时间
ColorPicker 允许用户选择颜色
UserControl 可以重用的控件
另有其他的,暂不先容

五、WPF示例项目GitHub地址(待更新)

https://github.com/Harry-Jon/WPF_Study

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/14039.html