XAML加载的四种方式
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加载的四种方式的更多相关文章
- Storyboard中ViewController加载的四种方式
		这个总结来自于<Programming iOS 10>一书: 1.storyboard的初始化ViewController,通过方法instantiateInitialViewContro ... 
- route按需加载的3种方式:vue异步组件、es提案的import()、webpack的require.ensure()
		1. vue异步组件技术 vue-router配置路由,使用vue的异步组件技术,可以实现按需加载. 但是,这种情况下一个组件生成一个js文件.举例如下: { path: '/promisedemo' ... 
- 点评js异步加载的4种方式
		主要介绍了点评js异步加载的4种方式,帮助大家更全面的了解js异步加载方式,感兴趣的小伙伴们可以参考一下 js异步加载的4种方式,点评开始. <!DOCTYPE html> <htm ... 
- HBase协处理器加载的三种方式
		本文主要给大家罗列了HBase协处理器加载的三种方式:Shell加载(动态).Api加载(动态).配置文件加载(静态).其中静态加载方式需要重启HBase. 我们假设我们已经有一个现成的需要加载的协处 ... 
- APP中数据加载的6种方式-b
		我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以 ... 
- Flask程序相关配置加载的三种方式
		方式一:从对象中加载配置 1.定义配置类,在配置类中添加相应的配置 2.通过app.config.from_object(配置类)进行加载 代码如下: from flask import Flask ... 
- phper必知必会之类库自动加载的七种方式(三)
		## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{ public function show(){ ... 
- 第1节 IMPALA:10、基本查询语法;11、数据加载的4种方式
		9.3. 创建数据库表 创建student表 CREATE TABLE IF NOT EXISTS mydb1.student (name STRING, age INT, contact INT ) ... 
- cocos2d-x的lua脚本加载CocostudioUI两种方式
		前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ... 
随机推荐
- 遇到的一个Buffer too small问题
			在ROI中输出图像时遇到 经调试后发现是driver.Create时设置的波段数大于实际写入的波段数导致的 这里xImgIn.m_nBands有204,但实际写入的数据的bands只有3,修改时忘了修 ... 
- 网络编程(二)--TCP协议、基于tcp协议的套接字socket
			一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ... 
- Spring Boot Admin 2.1.0
			原文:https://blog.csdn.net/forezp/article/details/86105850 Spring Boot Admin简介 Spring Boot Admin是一个开源社 ... 
- 用session实现的用户登陆,客户端是怎样获取到cookie信息的
			大家都知道cookie是存在客户端,session存在服务器端.那么客户端具体是怎样获取cookie信息的呢? 更好的阅读体验可访问 这里. 实验环境 实验环境:xampp + Thinkphp5 + ... 
- 06-C#笔记-常量
			1. 进制 前缀:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制. 后缀:可以是 U 或 L 的组合,其中,U 和 L 分别表示 unsigned 和 long.后缀可以是大写或者 ... 
- C++中typedef和define的区别
			typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ... 
- P1908 逆序对-(cdq分治)
			https://www.luogu.org/problem/P1908 沿用归并排序的思想求逆序对. 坑1:结果爆int型,需要用longlong 坑2:相对于归并排序,在比较的时候多了一个等号 举例 ... 
- 网页网站基础入门篇: 使用Adobe Dreamweaver CS6 制作网页/网站
			咱开发网页或者网站呢,最好使用个软件,我使用的是Adobe Dreamweaver CS6 (自行下载安装) 打开软件 现在呢咱使用 html5 <!doctype html> <h ... 
- bzoj [SDOI2014]数表 莫比乌斯反演 BIT
			bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ... 
- vb.net 判断某个文件是否已经打开了
			' 判断这个excel文件是否已经打开了: 如果打开了,不能下载 Try Dim fs AsFileStream = NewFileStream(excelFileName, FileMode.O ... 
