XAML加载与编译可以分为四种:

  • 仅使用代码进行WPF程序的生成
  • 使用代码和未编译的标记
  • 使用代码和编译过的BAML

1、只是用代码进行窗体的生成:优点是可以随意定制应用程序,缺点是没有可视化编辑窗口,会使得界面排版变得枯燥。

private void InitlizationMethod()
{
//设定窗体宽高
this.Width = this.Height = ;
//设定窗口位置
this.Left = this.Top = ;
this.Title = "只是用后台代码";
//创建一个栈面板放置Button
DockPanel dockPanel = new DockPanel();
button1 = new Button()
{
Content = "点我",
Margin = new Thickness()
};
button1.Click += button1_click;
IAddChild container = dockPanel;
container.AddChild(button1);
container = this;
container.AddChild(dockPanel);
}
private void button1_click(Object sender, RoutedEventArgs e)
{
button1.Content = "完成√";
}

2、使用代码加载纯XAML文档:XamlReader对象会将XAML文档从文件流中读取出来,我们通过使用LogicTreeHelper类获取到窗口中的控件,从而操作他们。

  • 先准备一个纯XAML文档
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Button DockPanel.Dock="Bottom" Name="button1" Margin="30">点</Button>
</DockPanel>
  • 在后台代码中加载并操作它里面的控件
private void InitlizationMethod(string xamlFile)
{
//设定窗体宽高
this.Width = this.Height = ;
//设定窗口位置
this.Left = this.Top = ;
this.Title = "动态加载XAML";
//从其他文件中获取XAML内容
DependencyObject rootElement;
using (FileStream fileStream = new FileStream(xamlFile, FileMode.Open))
{
rootElement = (DependencyObject)XamlReader.Load(fileStream);
}
this.Content = rootElement;
button1 = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "button1");
}

3、XAML被编译成二进制文件存在.baml为后缀的文件中,其次为窗口创建一个部分类以.g,cs为后缀。

  • 当InitializeComponent()方法调用时加载BAML文件构建可视化对象。
  • 在Connect()方法中将控件对象对应到字段中并且识别所有事件代码;该方法发现几个命名对象就会被调用几次。
  • 部分类中不包含实例化和初始化的代码,初始化任务在Application.LoadComponent()处理BAML时执行。

4、只有XAML代码的文件,不使用任何代码:这样的XAML文件被称为松散的XAML。

  • 删除一个XAML文档中的Class属性、删除所有事件特性
  • 使用IE浏览器打开XAML文件

XAML加载的四种方式的更多相关文章

  1. Storyboard中ViewController加载的四种方式

    这个总结来自于<Programming iOS 10>一书: 1.storyboard的初始化ViewController,通过方法instantiateInitialViewContro ...

  2. route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()

    1. vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载. 但是,这种情况下一个组件生成一个js文件.举例如下: { path: '/promisedemo' ...

  3. 点评js异步加载的4种方式

    主要介绍了点评js异步加载的4种方式,帮助大家更全面的了解js异步加载方式,感兴趣的小伙伴们可以参考一下 js异步加载的4种方式,点评开始. <!DOCTYPE html> <htm ...

  4. HBase协处理器加载的三种方式

    本文主要给大家罗列了HBase协处理器加载的三种方式:Shell加载(动态).Api加载(动态).配置文件加载(静态).其中静态加载方式需要重启HBase. 我们假设我们已经有一个现成的需要加载的协处 ...

  5. APP中数据加载的6种方式-b

    我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ...

  6. Flask程序相关配置加载的三种方式

    方式一:从对象中加载配置 1.定义配置类,在配置类中添加相应的配置 2.通过app.config.from_object(配置类)进行加载 代码如下: from flask import Flask ...

  7. phper必知必会之类库自动加载的七种方式(三)

    ## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{ public function show(){ ...

  8. 第1节 IMPALA:10、基本查询语法;11、数据加载的4种方式

    9.3. 创建数据库表 创建student表 CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT ) ...

  9. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

随机推荐

  1. 适用于Centos6/7,vsftp自动安装脚本

    #!/bin/bash #vsftp install . /etc/rc.d/init.d/functions NUM=`rpm -q centos-release | awk -F '-' '{pr ...

  2. 初学者git的用法

    初学者github的用法 1.在github上创建一个自己的工程 2.按着上面的要求执行你的命令行 3.将你的代码放到这个已经创建了.git的文件夹中,执行git add . 系统出现如下错误:war ...

  3. 08-cmake语法-set()

    CMake的基本数据类型是字符串,一组字符串在一起称为列表(list) 用于设置变量. set(VAR a b c) # 输出 VAR = a;b;c VAR 就是一个list 参考: https:/ ...

  4. CentOS7 最小安装 vmware 创建虚拟机 nmcli ip systemctl

    镜像网站 一些开源软件的国内镜像源 站点版 (一).企业站 1.搜狐:http://mirrors.sohu.com/ 2.网易:http://mirrors.163.com/ 3.阿里云:http: ...

  5. python将数组写入文件

    import numpy as npdata = np.array([[1,2], [3,4]]) np.savetxt('out.txt', data, fmt="%d") #保 ...

  6. HTML基础三-JS

    一.JAVA Script 1.1 基本用法 HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的P ...

  7. java 多态调用

    1. 调用成员变量:编译.运行都看左边.2. 调用成员方法:编译看左边,运行看右边.  ----------  instanceof 判断某个对象是否属于某种数据类型: boolean  b  = 对 ...

  8. STL——list用法总结

    头文件 #include<list> 声明一个int型的list:list<int> a: 1.list的构造函数 list<int>a{1,2,3} list&l ...

  9. shell编程题(五)

    打印root可以使用可执行文件数. echo "root's bins: $(find ./ -type f | xargs ls -l | sed '/-..x/p' | wc -l)&q ...

  10. expect脚本自动获取root权限

    Linux脚本中有很多场景是进行远程操作的,例如远程登录ssh.远程复制scp.文件传输sftp等.这些命令中都会涉及到安全密码的输入,正常使用命令时是需要人工手动输入密码并接受安全验证的.为了实现自 ...