WPF01(xaml)

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中创建数组,还是举个例子。

时间: 2024-10-13 06:47:29

WPF01(xaml)的相关文章

WP8.1开发中对于XAML中一些语言的学习(1);

以前在学习WP开发的时候,看到视频中说到程序在创建之初,MainPaige.xaml页面上有一些代码: <Page x:Class="草案.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="usi

OUTLOOK.EXE错误模块名称: Windows.UI.Xaml.dll

错误应用程序名称: OUTLOOK.EXE,版本: 15.0.4875.1000,时间戳: 0x57fc9641 错误模块名称: Windows.UI.Xaml.dll,版本: 10.0.14393.953,时间戳: 0x58ba5c3d 异常代码: 0xc000027b 错误偏移量: 0x00000000006d611b 错误进程 ID: 0x191c 错误应用程序启动时间: 0x01d2ae038d010d36 错误应用程序路径: C:\Program Files\Microsoft Off

XAML的理解

1.什么是XAML?XAML是WPF技术中专门用于涉及UI的语言 2.XAML使用树形逻辑结构来描述UI 3.一份XAML文档中除了使用标签声明对象就是初始化对象的属性 4.简化XAML的技巧:(1)能使用Attribute=Value形式赋值的就不使用属性元素.(2)充分利用默认值,去除冗余:StartPoint=“0,0” EndPoint=“1,1”是默认值,可以省略.(3)充分利用XAML的简写方式,如:LinearGradientBrush.GradientStops的数据类型是Gra

2. XAML

1. 什么是 XAML XAML 可以说是 XML 的一个特殊子集,使用相同的语法,只是 XML 可以自定义任何的节点和属性,但 XAML 是有所限制的,只能在规定的命名空间下使用. 2. namespace XAML 所受的限制即 namespace. x:Class="WhatIsXAML.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=&qu

Visual Studio 2008 Package Load Failure:未能正确加载包“Microsoft.VisualStudio.Xaml”

在安装好Visual Studio 2008后,启动Visual Studio 2008 发现如下提示: 包加载失败 未能正确加载包“Microsoft.VisualStudio.Xaml”( GUID = {E58C2A8B-BCC4-4559-AD59-D62EB6D58A22} ).请与包供应商联系以获得帮助.由于可能会发生环境损坏,建议重新启动应用程序.要禁止将来加载此包吗? 可以使用“devenv /resetskippkgs”重新启用包加载. 按照提示,在visual studio

炫酷WPF——XAML

XAML主要规则: → XAML文档中的每个元素都映射为.NET类的一个实例,元素的名称也完全对应于类名.如元素<Button>指示WPF创建Button对象. → 与所有XML文档一样,可在一个元素中嵌套另一个元素,XAML让每个类灵活地决定如何处理嵌套.嵌套通常是一种表示“包含”的方法——如果在一个Grid元素中发现一个Button元素,那么用户界面可能包括 一个在其内部包含一个Button元素的Grid元素. → 可通过attribute设置每个类的property.在某些attribu

WPF关于Generic.xaml

如果需要用到Themes/Generic.xaml作为默认风格资源文件,不要忘了该项目的AssemblyInfo.cs中必须要有以下这段: [assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application re

App.xaml.cs

using System.Windows; namespace HelloWorld { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); Bootstrapper boots

App.xaml

<Application x:Class="HelloWorld.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Application.Resources> <ResourceDictionary> &l