• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#学习之30分钟学会XAML

c#学习之30分钟学会XAML

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#学习之30分钟学会XAML等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1.狂妄的WPF
相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API。例如:WinForm(带控件表单)、GDI+(2D图形)、DirectX API(3D图形)以及流媒体和流文档等,都需要不同的API来构建应用程序。

WPF就是看着上面的操作复杂和不爽,自己决定做老大,想用DirectX技术涵盖一切,于是想要将上述的东西全部融合到自身,减少复杂度,让编程变得爽起来的技术。

而不可否认的是,WPF虽然很狂妄,但是这种技术里面还是有不少的可圈可点的东西。而支持WPF狂妄的资本,则就是和它后台代码可以前后分离的XAML技术。下面用30分钟时间说一下XAML。

2.什么是XAML
一个界面程序的核心,无疑就是界面和后台代码,而xaml就是微软为构建应用程序界面而创建的一种描述性语言,也就是说,这东西是搞界面的。

先上一段xaml代码:

 <Window x:Class='MyXaml.Window1'
  xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  Title='MyXaml' Height='150' Width='300' >
  <Grid>
   <Grid.RowDefinitions>
   <RowDefinition Height='30'/>
   <RowDefinition Height='30'/>
   <RowDefinition Height='30'/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
   <ColumnDefinition Width='Auto'/>
   <ColumnDefinition Width='*'/>
   </Grid.ColumnDefinitions>
   <TextBlock Grid.Column='0' Grid.Row='0' FontWeight='Bold' Text='姓名:' Width='30'/>
   <TextBlock Grid.Column='0' Grid.Row='1' FontWeight='Bold' Width='30'>性别:</TextBlock>
   <TextBlock Grid.Column='0' Grid.Row='2' FontWeight='Bold' Width='30' Text='年龄'></TextBlock>
   <TextBox Grid.Column='1' Grid.Row='0' FontWeight='Bold' Width='100' />
   <TextBox Grid.Column='1' Grid.Row='1' FontWeight='Bold' Width='100'/>
   <TextBox Grid.Column='1' Grid.Row='2' FontWeight='Bold' Width='100'/>
  </Grid>
 </Window>
</div>

上述xaml是我设计了一个三行两列的界面,运行之后显示如下:

在此,我没有写一行c#代码,但是它竟然可以运行,所以也可以说它也是一种编程语言。只不过它更关注界面上面的东西而已。

那么它的运行是如何产生的?下面看几个东西:

x:Class='MyXaml.Window1' ——利用class特性指定c#类名(后台c#代码)

xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml——这表示利用x代替XAML的命名空间。用于包含特定的关键字和System.Windows.Markup中类型的子集。

xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation——另一个命名空间。映射诸多wpf.net命名空间(system.windows.xxx,是个一对多的映射,主要封装了三个程序集中,WindowsBase.dll、Presentation.dll和PresentationFramework.dll)

2.1 启动
程序启动的地方,其实是在程序的App.xaml文件里面:

 <Application x:Class='MyXaml.App'
  xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
  xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  StartupUri='Window1.xaml'>
  <Application.Resources>
   
  </Application.Resources>
 </Application>
</div>

看下面这句:

StartupUri='Window1.xaml'
这个就是程序的入口点,运行程序之后,我们就将window1显示在了显示屏上。

3.XAML语法概述
上述xaml中,显示的一个核心布局就是以下这些代码:

 <Grid>
   <Grid.RowDefinitions>
   <RowDefinition Height='30'/>
   <RowDefinition Height='30'/>
   <RowDefinition Height='30'/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
   <ColumnDefinition Width='Auto'/>
   <ColumnDefinition Width='*'/>
   </Grid.ColumnDefinitions>
   <TextBlock Grid.Column='0' Grid.Row='0' FontWeight='Bold' Text='姓名:' Width='30'/>
   <TextBlock Grid.Column='0' Grid.Row='1' FontWeight='Bold' Width='30'>性别:</TextBlock>
   <TextBlock Grid.Column='0' Grid.Row='2' FontWeight='Bold' Width='30' Text='年龄'></TextBlock>
   <TextBox Grid.Column='1' Grid.Row='0' FontWeight='Bold' Width='100' />
   <TextBox Grid.Column='1' Grid.Row='1' FontWeight='Bold' Width='100'/>
   <TextBox Grid.Column='1' Grid.Row='2' FontWeight='Bold' Width='100'/>
  </Grid>

</div>

1、看Grid控件,这个在wpf中是一个布局控件,就跟将窗体设置单元格差不过,可以依据它的row和column属性来设置行和列。上述设置了一个三行两列的布局。

2、看TextBlock和TextBox控件,这些都是一些显示控件,一个显示条和一个文本框,wpf中除此之外,还有许多的控件。

首先需要再确认的一点,那就是在C#中一切皆对象。如此一来,也就好理解了。

在XAML中的这些形形色色的控件其实就是一个个的类,我们应用了他们就相当于是应用了一个个的对象,而他们之中定义的一些width、height等属性,就是这些类中封装的一些属性字段。

当然,像上面TextBox和TextBlock中的Grid.Column='1' Grid.Row='2'等属性,其实并不属于这两个类中的属性和字段。

而使得他们具备这样属性的,无疑就是外面的Grid布局控件赋予的,而在WPF中这样的功能实现叫做附加属性,是依赖属性的一个特殊的用法。关于依赖属性,在以后会详细的讨论。

第一个总结
WPF的XAML语法其实可以理解成另外一种形式的编程语言,其语法表现形式和XML类似,但是更严谨和更要求准确性。

XAML主要包括布局和控件,以此来构建各种形态的应用程序,除此之外,其中还有许多新的强大的东西,使得它更灵活和方便,例如依赖属性。

3.1 布局
WPF中的布局常用的主要包括五种:Canvas、Grid、StackPanel、DockPanel和WrapPanel。下面分别说一下这五种布局控件的使用。

1、 Canvas

要说Canvas,先看以下的xaml代码:

<Canvas>
  <Button Name='btn1' Height='100' Width='100' Content='btn1' Margin='10'/>
  <Button Name='btn2' Height='100' Width='100' Content='btn2' Margin='10'/>
</Canvas>
</div>

然后,查看在画布Canvas上面生成的画面,情况如下:

为什么不显示btn1?因为两个button重叠了起来,只显示最上面的控件(越接近结束标签 </Canvas>的控件,如果两个button的位置颠倒一下,显现出来的就是btn1).

Canvas的布局基本就和之前的Winform一致了,都是以左上角为中心,按照上下距离左上角的坐标为标准的。如果想要改变button的位置,就要给button控件设置Canvas.Left、 Canvas.Top、Canvas.Bottom 和Canvas.Right这四个属性。

所以Canvas得重点在绝对布局,对要求不太高的界面和比较固定的界面可以用这样的方式拖拽控件布局。

2、 Grid

WPF窗体程序的默认布局就是一个Grid,先看如下代码:

<Grid>
  <Button Name='btn1' Height='100' Width='100' Content='btn1' Margin='10'/>
  <Button Name='btn2' Height='100' Width='100' Content='btn2' Margin='10'/>
</Grid>
</div>

看到这里,你也许会说,这不是和上面的Canvas一样吗?但是真的一样吗?他们的窗体如下所示:

相信你一定看出来了,不错,和Canvas不同,Grid窗体默认的显示是以中心为基准的,不像Canvas布局是以左上角为标准。

那么Grid布局有什么样的好处呢?看下面这些代码:

<Grid>
  <Grid.RowDefinitions>
   <RowDefinition Height='*'/>
   <RowDefinition Height='*'/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
   <ColumnDefinition Width='*'/>
   <ColumnDefinition Width='*'/>
  </Grid.ColumnDefinitions>
  <Button Name='btn1' Height='40' Width='40' Content='btn1' />
  <Button Grid.Row='1' Grid.Column='1' Name='btn2' Height='40' Width='40' Content='btn2' />
</Grid>
</div>

然后在看看生成的窗口:

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-03-01c#中的delegate(委托)和event(事件)
  • 2017-05-28基于C#生成条形码操作知识汇总附源码下载
  • 2017-05-28C#中动态数组用法实例
  • 2017-05-28C#编程实现Excel文档中搜索文本内容的方法及思路
  • 2017-05-28C#中委托和事件的区别实例解析
  • 2017-05-28C#进度轴控件分享
  • 2017-05-28C#隐藏控制台键盘输入的方法
  • 2017-05-28C#操作windows注册表的方法
  • 2017-05-28C#实现图形路径变换的方法
  • 2017-05-28C#无法打开计算机“.”上的 IISADMIN 服务的解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c#中多线程访问winform控件的若干问题小结
    • C#实现基于Base64的加密解密类实例
    • C#中HashTable的定义与使用方法
    • 浅谈C# 序列化与反序列化几种格式的转换
    • C#影院售票系统毕业设计(4)
    • C#创建一个小型Web Server(Socket实现)
    • C#验证控件validator的简单使用
    • C# 字符串按 ASCII码 排序的方法
    • c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
    • C#中使用反射遍历一个对象属性及值的小技巧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有