天天看點

WPF學習筆記——3)使用代碼和未編譯的XAML建立WPF程式1、利用代碼建立視窗類2、利用未編譯的XAML添加元件

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

WPF學習筆記——3)使用代碼和未編譯的XAML建立WPF程式1、利用代碼建立視窗類2、利用未編譯的XAML添加元件

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

WPF學習筆記——3)使用代碼和未編譯的XAML建立WPF程式1、利用代碼建立視窗類2、利用未編譯的XAML添加元件
WPF學習筆記——3)使用代碼和未編譯的XAML建立WPF程式1、利用代碼建立視窗類2、利用未編譯的XAML添加元件