20171009-20171015C#WPF工作学习周总结

来源:互联网 发布:java按空格分割字符串 编辑:程序博客网 时间:2024/06/05 13:36

WPF学习

现在设计师和程序员一起工作,共同维护软件的版本,只是他们使用的软件不一样—-设计师使用Blend(Expression设计套件工具中的一个)来设计UI,程序员使用Visual Studio 开发后台逻辑应用代码。Blend就像PhotoShop等设计工具,因此可以最大限度的发挥设计师的特长。使用它,设计师不仅可以设计出绚丽多彩的UI,还可以让UI上包含动画—–虽然程序员也可以做到这些,但从专业性,时间开销以及技术要求上显然是划不来的。更重要的是,这些绚丽的UI动画都会以XMAL的形式直接保存进项目,无需转化就可以直接编译,节省了大量的时间和成本。

XMAL是一种单纯的声明型语言,这就是说它只能用来声明一些UI元素、绘制UI和动画(在XMAL中实现动画是不需要编程的),根本无法在其中加入程序逻辑,这就强制的把逻辑代码从UI中赶走了。

从零开始学XAML

XAML是由XML派生出来的语言,所以有很多在XML中的概念在XAML中是通用的。比如使用标签声明一个元素(每一个元素对应内存中的一个对象)时,需要使用其实标签\和结束标签\.

XAML是一种声明式语言,当你看见一个标签,就证明你声明了一个对象;

来看一段WPF的代码~

在VS中,新建一个WPF程序,便会自动生成如下代码:

<Window x:Class="WpfApplication2.Window2"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="Window2" Height="300" Width="300">    <Grid>    </Grid></Window>

和xml类似,有标签的概念,当然,这里Title、Width、Height一看就知道和Window的Property对象对应的。中间两行(即两个xmlns)是在声明名称空间。最上面一行是在使用名为class的Attribute,这个Attribute来自于X:前缀所对应的名称空间。下面仔细解释。

前面已经说过,XMAL语言是从XML语言派生而来的。XML有一个功能就是可以在XML文档的标签内使用xmlns特征来定义名称空间(NameSpace),XML也就是XML–NameSpace的缩写。定义名称空间的好处就是,当来源不同的类重名时,可以使用名称空间加以区分。xmlns特征的语法如下:

xmlns[:可选的映射前缀]="名称空间"

xmlns后可以跟一个可选的映射前缀,之前用冒号隔开。如果没有写可选映射的前缀,那就意味着所有来自这个名称空间的所有标签都不用加这个前缀,这个没有映射的命名空间称为“默认的命名空间”,默认名称空间只能有一个,而且应该选择其中使用最频繁的名称空间来作为默认命名空间。

上述例子中,\和\来自于第二行声明的默认命名空间,而第一行的CLASS特征则来来自于三行的中x:前缀对应的名称空间。

XAML中引用外来程序集和其中.NET名称空间的语法和C#是不一样的。在C#中,如果想使用System.Windows.Control名称空间内的Button类,需要先把包含System.Windows.Control名称空间的程序集PresentationFramework.dll添加引用到项目中,然后再用C#代码顶部写上一句:using System.Windows.Control;。在XAML中做同样的事情也需要添加对程序集的引用,然后再在根元素的起始标签中写上一句:xmlns:c=”clr-namespace:System.Windows.Control;assembly=PresentationFramework”。c是映射的前缀,换成其它字符串也可以。因为button来自前缀为c的命名空间,所以在使用button的时候就要使用\….\。

为什么名称空间看上去想一个网站地址呢?

其实把它copy到浏览器地址栏尝试跳转也不会打开网页。这里只是XAML解释器的一个硬性编码(hard-coding),只要见到这些固定的字符串,就会把一系列的程序集和程序集中包含的名称空间引入进来。

WPF学习——系统地学习XAML语法

与传统的设计思维不同,XAML使用树形逻辑结构来描述UI。

注意:

XAML中对对象赋值总共有两种方法:

A:使用字符串进行简单赋值。

B:使用属性元素(Property Element)进行复杂赋值。


本周的工作主要做了一个简易版WPF的计算器,大概了解了WPF中的布局,和HTML+CSS很像。另外,WPF中确实有单独的用于布局的代码块,这里,可以说二者非常相似了。

第二个就是做了仿QQ2013的登录界面,用到了Grid,StackPanel,TextBox,Button等一些空间,并尝试设置自定义样式,利用属性值做修改。

另外,一个附加的任务,做简易版的虚拟键盘,应该是要用到SendInput GetKeyState MapVirtualKe的API,还要用到数据绑定等等知识,估计不简单。。。

原创粉丝点击