对于编写 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