1、利用代码创建窗口类
我们首先新建一个窗口类,继承Window类,这个窗口是用来显示组件的,一般我们新建一个WPF程序时这个窗口类已经建好了,这里我们可以直接利用他的代码
using System.Windows;
using System.Windows.Controls;
using System.IO;
using System.Windows.Markup;
namespace _03.create_wpf_by_xaml
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private Button myButton;
public MainWindow()
{
InitializeComponent();
}
}
}
2、利用未编译的XAML添加组件
下面就是对代码进行修改,让窗口加载我们的XAML文件从而达到添加组件的目的,我们首先对主窗口MainWindow的构造函数进行重载,参数为我们的XAML文件的名称,并且设置一些窗口的基本属性。
//重载构造函数,以xaml文件的名称为参数
public MainWindow(string xamlFile)
{
//设置窗体的属性
this.Width = this.Height = 285;
this.Left = this.Top = 100;
this.Title = "Danamically Loaded XAML";
}
然后接着在重载的构造函数里面加载XAML文件,
//从外部文件获取xaml的内容
DependencyObject rootElement;//定义一个依赖来接收xaml文件读取的内容
using (FileStream fs = new FileStream(xamlFile, FileMode.Open))
{
rootElement = (DependencyObject)XamlReader.Load(fs);
}
this.Content = rootElement;//将依赖的内容赋值给窗体的content属性
//从xaml的内容中找到button1名字的按钮,并赋值给mybutton对象
myButton = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "button1");
加载主要用到了XamlReader.Load这个函数,需要的参数就是我们构造函数传进来的XAML文件的名字
如果需要对XAML里面的组件进行操作,比如加一些响应函数,那么我们需要在主窗口类里面添加一个对应组件的私有变量,然后利用LogicalTreeHelper.FindLogicalNode()这个函数,第一个参数为xaml读取的依赖变量,第二个参数是要操作的组件名字。
我们试着对xaml中定义的按钮组件button1添加一个响应函数
在重载的构造函数加入按钮响应函数的指定代码
//添加事件处理程序
myButton.Click += myButton_Click;
然后在主窗口类中对这个响应函数进行声明并实现
private void myButton_Click(object sender, RoutedEventArgs e)
{
myButton.Content = "成功";
}
xaml的文件的内容主要如下:(并且该文件需要放到工程的DEBUG目录下)

下面是结果(左图为单击之前,右图为单击后):