WPF 纯代码生成界面(不使用XAML)

    对于编写 WPF 应用程序,只是用代码进行开发而不使用任何 XAML 不是常见的方式(但是仍然完全支持)。只使用代码进行开发的明显缺点是,有可能会使用编写 WPF 应用程序成为极端乏味的工作。 WPF 控件没有包含参数化的构造函数,因此即使为窗体添加一个简单的按钮也需要编写几行代码。只使用代码进行开发的一个潜在的优点是可以随意定制应用程序。例如,可以根据数据记录中的信息生成一个充满输入控件的窗体,或者可以根据当前的用户酌情添加或替换控件。需要的所有内容只不过是少量的条件逻辑。相比之下,如果使用XAML文档,它们只能作为固定不变的资源嵌入到程序集中。

    以下代码用于生成一个普通的窗体,该窗体包含一个按钮盒一个事件处理程序(如下图)。当创建窗口时,构造函数调用一个 InitializeComponent() 方法,该方法实例化并配置这个按钮和窗体,并连接事件处理程序。

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

namespace _1003_CodeOnlyWindow
{
    public class Window1:Window
    {
        private Button button1;

        public Window1()
        {
            InitializeComponent();
        }

        void InitializeComponent()
        {
            //配置当前窗体
            this.Width = this.Height = 285;
            this.Left = this.Top = 100;
            this.Title = "Code-Only Window";

            //创建一个面板放置按钮
            DockPanel panel = new DockPanel();

            //创建按钮
            button1 = new Button();
            button1.Content = "请点我";
            button1.Margin = new Thickness(30);

            //注册按钮点击事件
            button1.Click += button1_Click;

            //将按钮放置到面板中
            IAddChild container = panel;
            container.AddChild(button1);

            //将面板放置到窗体中
            container = this;
            container.AddChild(panel);
        }

        void button1_Click(object sender, RoutedEventArgs e)
        {
            button1.Content = "Thank you!";
        }
    }
}

    从概念上讲,在本示例中的程序更像传统的 Winform 程序的一个窗体,它继承自Window基类,并未每个控件添加一个私有成员变量。为清晰起见,这个类在一个专门的 InitializeComponent() 方法中执行初始化操作。

    为启动这个应用程序,可在 Main() 方法中添加如下代码:

    public class Program:Application
    {
        [STAThread()]
        static void Main()
        {
            Program app = new Program();
            app.MainWindow = new Window1();
            app.MainWindow.ShowDialog();
        }
    }

源码下载:http://files.cnblogs.com/andrew-blog/1003_CodeOnlyWindow.rar

使用工具:VS2012 

参考:http://www.wxzzz.com/?id=127

原文地址:https://www.cnblogs.com/andrew-blog/p/WPF_CodeOnly_XAML.html