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文件

猜你喜欢

转载自www.cnblogs.com/bigbosscyb/p/11312678.html
今日推荐