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. 枚举ENUM的tostring() valueof()name()和values()用法

    从jdk5出现了枚举类后,定义一些字典值可以使用枚举类型; 枚举常用的方法是values():对枚举中的常量值进行遍历; valueof(String name) :根据名称获取枚举类中定义的常量值; ...

  2. python相关资源

    http://blog.csdn.net/ken_wanglin/article/details/53095967 http://www.infoq.com/cn/articles/Python-wr ...

  3. phpcms切换到php7.2后无法修改文章提示Uncaught Error: [] operator not supported for strings

    前段时间将客户的phpcms站点升级到php7.2,相对比较顺利,但是今天他反应文章无法修改了,提示Uncaught Error: [] operator not supported for stri ...

  4. gnome3 调整标题栏高度

    适用于:gtk 3.20 + 1. 在用户主目录 -/.config/gtk3.0/ 下新建gtk.css文件: 2. 复制如下css值: headerbar.default-decoration { ...

  5. Android Studio 之 GridView

    1. 数据源 ArrayList Cursor 2. 适配器 Adapter ArrayAdapter SmipleAdapter SmipleCursorAdapter BaseAdapter

  6. Android Studio 之 ROM【2】, LiveData+ViewModel+AsyncTask+Repository

    改造上一节 ROM[1], 1.利用 LiveData<List<Word>> 与 observe 中的 onChanged 配合,删除掉之前的textView更新函数(upd ...

  7. 展示时测试Markdown渲染

    \begin{equation} %公式 Speedup_{overall} = \frac{1}{{(1-Fraction_{partitioned})} +\frac{Fraction_{part ...

  8. 【Gamma阶段】第九次Scrum Meeting

    冰多多团队-Gamma阶段第九次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 美化前端及编辑器界面,编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 添加scp工具,添加 ...

  9. html中利用flex容器书写的布局样式

    首先页面基本样式见下图: 如有兴趣可以打开https://migloo.gitee.io/front 或者 https://www.igloo.xin/front 进行查看

  10. centos7 安装hadoop2.7.6(分布式)

    本文只做简单介绍,具体步骤操作请参考centos6.5 安装hadoop1.2.1亲测版 本篇只简单介绍安装步骤 1.安装目录 /usr/local/hadoop (HADOOP_HOME) 2,创建 ...