使用程式碼和未經編譯的xaml建立WPF應用程式
阿新 • • 發佈:2021-11-29
寫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 { privateButton 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)。 // 模態與非模態窗體的主要區別是窗體顯示的時候是否可以操作其他窗體。模態窗體不允許操作其他窗體,非模態窗體可以操作其他窗體。 } }