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目錄下)

下面是結果(左圖為單擊之前,右圖為單擊後):