博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xaml
阅读量:5973 次
发布时间:2019-06-19

本文共 2373 字,大约阅读时间需要 7 分钟。

一、xaml简介

1.定义

xaml extensible application markup language 

2.由来,为什么会有这个

 winform 时代,每个空间都是使用后台代码生成,wpf页面显示使用xml实现(但是也可以后台代码),这样解决了开发人员和设计人员协作开发的问题。

3.xaml变体应用

wpf xaml

xps xaml

silverlight xaml

wf xaml

4.xaml编译

被编译为baml(binary application markup language),二进制应用程序标记语言,是xaml的二进制表示。

目的是能够让程序快速运行,并很容易的迁移到其他工具和平台。

 

二、xaml基础

1.xaml文档中的每个元素都会被映射为.net类的实例,元素的名称也和类名一致.

2.元素之间可以相互嵌套

3.元素的属性(attribute)设置每个类的属性(property)

4.尽管可以使用任何的顶级元素,但是wpf应用程序只使用以下几个元素作为顶级元素:

window元素

page元素

application元素

5.xaml名称空间

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

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

因为xaml中的元素对应.net类的一个实例,名称空间指代的是这些类的名称空间(位置),上面的a命名空间是wpf的核心名称空间。它包含了所有的wpf类,包括用来构建用户界面的控件,b命名空间它包含xaml实用特性,这些特性可影响文档的解释方式。该名称空间被映射为前缀x,可以这样使用改名称空间(<x:elementName>)

备注:xaml的名称空间和.net的不是一一对应的。

6.代码隐藏类

<Window x:class="WindowsApplication.Window1">

7.给控件命名 Name /x:Name

包含name属性必须使用RuntimeNameProperty特性修饰。

[RuntimeNameProperty("Name")]

[StyleTypedProperty(Property = "FocusVisualStyle", StyleTargetType = typeof(Control))]
[UsableDuringInitialization(true)]
[XmlLangProperty("Language")]
public class FrameworkElement :......

三、xaml中的属性和事件

1.简单属性与类型转换器

[Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)]

[TypeConverter(typeof(TransformConverter))]
[ValueSerializer(typeof(TransformValueSerializer))]
public abstract class Transform :

如Transform属性,首先会检查Transform类的TypeConverter的声明,假若一个类没有这样的声明,会查找给属性使用值所对应的类的TypeConverter声明。如Foreground属性使用一个Brush对象作为属性的值,就会去检查Brush类的TypeConverter

 

2.复杂属性

元素的属性比较复杂,一个背景色要实现渐变,用简单的值表示的话会会比较难读懂,编程人员也容易出错,.xaml提供了属性元素语法,

<Grid Name="grid1">

    <Grid.Background>

        <LinearGradientBrush>

    <LinearGradientBrush.GradientStops>

      <GradientStop Offset="0.00" Color="Red"/>

        ....

        ...

</Grid>

 

3.标记扩展 (todo 没完全明白28页)

将属性设置为一个已经存在的对象,或者可能希望通过将一个属性绑定到另一个空间来动态地设置属性值。

使用:{标记扩展 参数}

一般语法

<Button Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >

属性元素语法

<Button>

  <Button.Foreground>

    <x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>

  </Button.Foreground>

</Button>

标记扩展是StaticExtension类(根据约定,在引用扩展类时,可以省略最后一个单词Extension)

所有的标记扩展都由继承自System.Windows.Markup.MarkupExtension类的类来实现。

4.附加属性

附加属性常常用于控件布局。

<TextBox Grid.Row="0">

...

附加属性根本不是真正的属性,他们实际上被转换为方法调用,DefiningType.SetPropertyName(),上面的附加属性会调用Grid.SetRow()方法

 

转载于:https://www.cnblogs.com/doublejun/p/6477203.html

你可能感兴趣的文章
JS 全屏和退出全屏--requestFullScreen详解及兼容代码
查看>>
从月薪5k到5w的过来人 给大学生程序员们的一点建议
查看>>
Android开发之 .9PNG 的使用
查看>>
设计模式——单例模式
查看>>
D2 日报 2019年5月8日
查看>>
SpringBoot系列之服务端解析客户端国际化请求
查看>>
“===” 也有不靠谱的时候
查看>>
聊聊elasticsearch的MembershipAction
查看>>
JavaScript 周报
查看>>
MySQL 中 update 修改数据与原数据相同会再次执行吗?
查看>>
JVM的类加载(为面试做准备)
查看>>
浅析三大图书回收平台,如何最优(gui)的回收二手图书
查看>>
数据结构 第1讲 基础知识
查看>>
飞冰 2.0 正式发布并支持 Vue 项目开发
查看>>
多线程面试必备基础知识汇总
查看>>
JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...
查看>>
vuex入门篇 -- state和getters
查看>>
美国国际消费电子展“牵动”中国产业链
查看>>
iOS学习笔记04 视图切换
查看>>
武汉区块链软件技术公司:区块链和比特币
查看>>