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. java 使用网建SMS发送短信验证码

    首先, 注册并登录网建用户, 新注册用户将获得5条的测试短信 网建短信通地址: http://sms.webchinese.cn/default.shtml 注册账号在此就不多做赘述了, 直接上代码 ...

  2. Ajax请求设置csrf_token

    方式1 通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送. $.ajax({ url: "/cookie_ajax/", type: ...

  3. jquery-ui提供的拖拽方法

    项目当中遇到了任意拖动div标签的功能,找到了jqueryui提供的draggable的插件,这个插件可以实现任意的div的移动,也可以移动到整个屏幕或者在父元素的范围内进行移动. 插件的api    ...

  4. BSGS算法(大小步算法)

    $BSGS$ 算法 $Baby\ Steps\ Giant\ Steps$. 致力于解决给定两个互质的数 $a,\ p$ 求一个最小的非负整数 $x$ 使得 $a^x\equiv b(mod\ p)$ ...

  5. 测试cnblog

    this prelkdfkdjfkljasdlkfjlkjlkjsdf this this code this this pre codeljkjkjkdjkdjkdjkjdkjdkdlajlkdjf ...

  6. Windows使用CMD命令查看进程和终止进程

    TaskList:        列出当前所有运行进程.        使用方法:在命令提示符中输入tasklist 然后回车,会看到类似下面的列表: 映像名称 PID 会话名 会话# 内存使用 == ...

  7. python网页内容提取神器lxml

    一.Xpath是什么 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath ...

  8. nginx 重定向 rewrite 规则

    1.rewrite配置 server { listen 80 default_server; server_name jeson.t.imooc.io; access_log /var/log/ngi ...

  9. 重新学习Spring注解——ICO

    02.组件注册-@Configuration&@Bean给容器中注册组件 03.组件注册-@ComponentScan-自动扫描组件&指定扫描规则 04.组件注册-自定义TypeFil ...

  10. pycharm运行过程中pycharm控制台和python控制台之间的切换

    有时候在调试(debug)python代码的时候,希望像matlab那样输入某一个变量以查看其值,这是需要把pycharm的console切换到python的console,以输入变量查看其值,点击那 ...