XAML加载的四种方式

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

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

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

private void InitlizationMethod()
{
    //设定窗体宽高
    this.Width = this.Height = 250;
    //设定窗口位置
    this.Left = this.Top = 100;
    this.Title = "只是用后台代码"; 
    //创建一个栈面板放置Button
    DockPanel dockPanel = new DockPanel();
    button1 = new Button()
    {
        Content = "点我",
        Margin = new Thickness(30)
    };
    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 = 500;
    //设定窗口位置
    this.Left = this.Top = 200;
    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文件

转载于:https://www.cnblogs.com/bigbosscyb/p/11312678.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值