XAML:(转自http://www.cnblogs.com/huangxincheng/archive/2012/06/17/2552511.html)

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid> </Grid>
</Window>

然后我们来对比一下webform中的page默认生成页面

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <title></title>
7 </head>
8 <body>
9 <form id="form1" runat="server">
10 <div>
11 </div>
12 </form>
13 </body>
14 </html>

我们发现xaml很像xml结构,是的,它是一种遵循xml规范的界面描述语言。

一:xaml简述

首先我默认大家都是熟悉webform的开发者。

1:x:Class

这个标记在webform中有对应的标记吗?有的,也就是这里的CodeBehind。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

2:xmlns

这个在webform中也有对应标记吗?首先我们要知道xmlns是干嘛的?哦,导入命名空间用的,那我们马上就想到webform中的对应标记import。

<%@ Import Namespace="System.IO" %>

那么下一个问题就是两者有什么不同吗?我们知道webform中导入命名空间需要一个一个的导入,4个命名空间就要写4个import,而xaml可以做到多

个命名空间做为一个导入。

 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

其实也就导入了如下4个wpf开发必备的dll,这个命名空间也是xaml中默认的命名空间。

3:xmlns:x

如果我们需要导入一些自定义的命名空间,那么我们就需要加上用“: + 自定义名称”的形式,这里微软导入了一个自定义的命名空间。

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

下面我们也来导入一个命名空间,实际开发中我们当然我们不会做成url的形式,这里我就取名为sys前缀

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System.IO;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>

4:Grid

我们都知道在n年前的html网页布局中都采用table的形式,table嵌套table,table跨行跨列等手段构建了漂亮的网页,这种排版思路也应用到了wpf中。

<1>:划分位置

我们画个两行两列的界面布局,这里我们只要将”鼠标“放在”红色方框“中,就会出现小三角,我们点击就可生成一个分割线,红色小圈圈标记着“行列”

的分割比列。

然后我们看一下生成的代码

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System.IO;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="161*" />
<RowDefinition Height="150*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="225*" />
<ColumnDefinition Width="278*" />
</Grid.ColumnDefinitions>
</Grid>

</Window>

我们奇怪的发现为什么宽度有“*”号,这里要解释一下wpf中对“宽高度”的设置有三个形式。

①:绝对尺寸         <RowDefinition Height="161" />

②:自动尺寸         <RowDefinition Height="auto" />

③:按比例尺寸      <RowDefinition Height="161*" />

那我们就有疑问了,到底161* 是多少呢?计算规则如下:

我们这里的窗体Height=350。

第一行高度为: 350/(161+150)*161

第二行高度为:350(161+150)*150

<2>: UI元素布局

①:UI元素对号入座

很简单,我们只要在button的Grid属性上设置button应该放在哪一个单元格即可。

②:UI元素跨行跨列

二:xaml中扩展标记

扩展标记分为两种:wpf级别和xaml级别。

<1> wpf级别扩展标记

①: StaticResource

用于获取资源的值,值获取在xaml编译的时候完成,什么意思呢?先举个例子。

首先,我们发现有一个window.Resources,这东西我们可以认为是在MainWindow类中定义的全局变量,这里我就定义个name=“一线码农”的

变量,那么textblock获取变量的方式就可以通过StaticResource。

②:DynamicResource

跟StaticResource唯一不同的是,它是在运行时获取的,如果大家知道C#里面的dynamic关键字,我想就不用解释了,上代码。

③:Binding

还是在webform中找一下关键字吧,相当于webform中的Eval,上代码说话。

 1 <Window x:Class="WpfApplication1.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:sys="clr-namespace:System;assembly=mscorlib"
5 Title="MainWindow" Height="350" Width="525">
6 <Grid>
7 <TextBox Height="23" Margin="87,75,0,0" Name="textBox1" Width="120" />
8 <TextBox Height="23" Margin="87,126,0,0" Name="textBox2" Width="120"
9 Text="{Binding ElementName=textBox1, Path=Text}" />
10 </Grid>
11 </Window>

这里我把textbox2的text绑定到了textbox1的text上,最后的效果就是我在textbox1上输入,textbox2也会相应的变化,很有意思。

④:TemplateBinding

这个被称为模板绑定,可以把对象的属性和模板的属性绑定起来,详细的介绍放在后续文章中。

<2>xaml级别扩展标记

①  x:Type

将模板或者样式指定在哪一种对象上时需要用type指定。

 1 <Window x:Class="WpfApplication1.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:sys="clr-namespace:System;assembly=mscorlib"
5 Title="MainWindow" Height="350" Width="525">
6 <Window.Resources>
7 <Style TargetType="{x:Type TextBox}">
8 <Setter Property="Background" Value="Red"/>
9 </Style>
10 </Window.Resources>
11 <Grid>
12 <TextBox Height="23"
13 Margin="87,75,0,0" Name="textBox1" Width="120" />
14 </Grid>
15 </Window>

如这里我定义的css样式,将background=red指定到textbox控件上。

②:x:Static

主要用于在xaml中获取某个对象的静态值,上代码说话。

namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static string name = "一线码农"; public MainWindow()
{
InitializeComponent();
}
}
}

xaml代码:

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" Text="{x:Static local:MainWindow.name}"
Margin="87,75,0,0" Name="textBox1" Width="120" />
</Grid>
</Window>

最后效果:

③:x:null

这个就比较简单了,xaml中某某控件设为null就靠它了。

1     <Grid>
2 <TextBox Height="23" Text="{x:Null}"
3 Margin="87,75,0,0" Name="textBox1" Width="120" />
4 </Grid>

④:x:Array

这个主要就是在xaml中创建数组,还是举个例子。

WPF01(xaml)的更多相关文章

  1. x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法

    这两天学习UWP开发,发现一个很有趣的问题,就是我题目中的描述的. 我习惯了在ResourceDictionary中写样式文件,但是发现用x:Bind时会有问题 如果是写在Style里,则提示 “x: ...

  2. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

  3. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  4. 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  5. 04.移动先行之谁主沉浮----XAML的探索

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) XMAL引入 XAML 类似于 HTML,是一种 ...

  6. 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 前面几节课,我们都是在前台创建对象,进行一些设置,那么我们为什么不用传统的方法来编程呢? 我们今天来试试你就明了了~~ 打开M ...

  7. 30分钟学会XAML

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

  8. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  9. WPF入门:XAML

    XAML是WPF技术中专门用于设计UI的语言 XAML优点最大的优点是将UI与逻辑代码剥离 创建第一个WPF应用程序 VS默认生成的WPF项目解决方案 Properties:里面主要包含了程序用到的一 ...

随机推荐

  1. js多少时间之前

    <?php $time = time()*1000; $end_time = strtotime("2018-01-01")*1000; $time_ago = $time ...

  2. Docker Caffe部署

    Caffe是一个清晰而高效的深度学习框架,纯粹的C++/CUDA架构,支持命令行.Python和MATLAB接口:可以在CPU和GPU直接无缝切换 Caffe的优势 上手快:模型与相应优化都是以文本形 ...

  3. [Err] 1022 - Can't write; duplicate key in table '#sql-1500_26'

        今天用powerdesigner修改了一些外键关系,有两个外键的名字取一样的,忘记改了.然后在用navicat运行sql文件时,报出[Err] 1022 - Can't write; dupl ...

  4. mysql处理添加外键时 error 150 问题

    当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的.像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上, ...

  5. bzoj 1003 [ZJOI2006]物流运输(最短路+dp)

    [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8973  Solved: 3839[Submit][Status][Di ...

  6. PHP分页类(较完美)

    <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $lis ...

  7. jQuery控件之分页控件-- kkpager v1.3使用简介

    js分页展示控件,传入简单参数就能使用的分页效果控件 在线测试链接: http://pgkk.github.io/kkpager/example/pager_test.html http://pgkk ...

  8. javaweb学习总结(九)—— 通过Servlet生成验证码图片(转)

    (每天都会更新至少一篇以上,有兴趣的可以关注)转载自孤傲苍狼 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

  9. Python入门--17--pickle

    pickle模块,实际用途也很简单.单一,主要用于保存列表(list),元祖(Tuple),字典(dictionary) 当然,一定是大的列表.字典什么的,成千上万行的字典.列表,才能凸显出它的用武之 ...

  10. Java通过开启线程池实现多线程

    计算1..100  和1...200 的和,使用线程池开启两个线程 调用Executors类的newFixedThreadPool方法参数是线程池容纳的线程数量 这里是2 返回的对象是 Executo ...