WPF学习笔记——3)使用代码和未编译的XAML创建WPF程序

1、利用代码创建窗口类

我们首先新建一个窗口类,继承Window类,这个窗口是用来显示组件的,一般我们新建一个WPF程序时这个窗口类已经建好了,这里我们可以直接利用他的代码

using System.Windows;
using System.Windows.Controls;
using System.IO;
using System.Windows.Markup;

namespace _03.create_wpf_by_xaml
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    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张图片

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

              WPF学习笔记——3)使用代码和未编译的XAML创建WPF程序_第2张图片 WPF学习笔记——3)使用代码和未编译的XAML创建WPF程序_第3张图片

你可能感兴趣的:(WPF,c#,wpf)