写xaml文件,放在对应编译后的文件夹下 windows2.xaml。
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Button Name = "button_1" Margin="60" >"Click me"</Button> </DockPanel>
在MainWindows.xaml 中,写带参数的构造函数。
public partial class MainWindow : Window { private Button mybutton; public MainWindow() { InitializeComponent(); } public MainWindow(string xmalFile) { //设置窗体 this.Width = this.Height = 300; this.Left = this.Top = 100; this.Title = "Dynamically Loaded XAML"; //// 从外部文档获取XAML的内容 //FileStream fileStream = new FileStream(xmalFile, FileMode.Open); //文件流对象, 二参打开方式 ////用xaml文件流对象 XamlReader 加载,转换为DependencyObject对象。 ////DependencyObject是WPF空间继承的的一个基类,可以放在任何类型的容器里。 //DependencyObject rootElement = (DependencyObject)XamlReader.Load(fileStream); DependencyObject rootElement; //因为流的关系,使用using语句(有开有关) using (FileStream fileStream = new FileStream(xmalFile, FileMode.Open)) { rootElement = (DependencyObject)XamlReader.Load(fileStream); } this.Content = rootElement; //内容关联,将xaml文件显示在当前窗口 mybutton = (Button) LogicalTreeHelper.FindLogicalNode(rootElement, "button_1"); mybutton.Click += myButton_Click;//注册 } private void myButton_Click(object sender, RoutedEventArgs e) { mybutton.Content = "Thank you."; } }
在Program 中启动
class Program : Application { [STAThread()] static void Main() { Program app = new Program(); app.MainWindow = new MainWindow("window2.xaml"); app.MainWindow.ShowDialog();//采用模态方法打开。 //模态显示(showdialog)和非模态显示(show)。 // 模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体。模态窗体不允许操作其他窗体,非模态窗体可以操作其他窗体。 } }