2013-07-03 24 views
7

Tôi có một cửa sổ WPF trong một dự án có tệp XAML và mã C# được liên kết phía sau tệp. Nếu tôi đặt "StartupUri = MainWindow.xaml" trong App.xaml vào cửa sổ này, cửa sổ sẽ mở ra như mong đợi khi tôi khởi động ứng dụng của mình.Cửa sổ WPF được tạo trong phương thức Application_Startup là trống

Tuy nhiên, tôi muốn ứng dụng của mình có tham số dòng lệnh và sau đó quyết định xem có nên mở GUI hay không. Vì vậy, thay vào đó tôi đã đặt "Startup = Application_Startup" trong tệp App.xaml của tôi được định nghĩa như được hiển thị bên dưới.

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     if (e.Args.Length > 1) 
     { 
      //do automated tasks 
     } 
     else 
     { 
      //open ui 

      MainWindow window = new MainWindow(); 
      this.MainWindow = window; 

      window.Show(); 
     } 
    } 

Tuy nhiên, khi tôi chạy cửa sổ này được hiển thị hoàn toàn trống.

enter image description here

+0

có thể trùng lặp của [Dòng lệnh WPF] (http://stackoverflow.com/questions/426421/wpf-command-line) –

Trả lời

9

Thêm window.InitializeComponent() dường như làm các trick:

  MainWindow window = new MainWindow(); 
      Application.Current.MainWindow = window; 
      window.InitializeComponent(); 
      window.Show(); 

Tôi thường muốn có một chút giải thích về lý do tại sao một cái gì đó làm hoặc không hoạt động. Tôi không có đầu mối trong trường hợp này. Tôi có thể thấy rằng các ví dụ trực tuyến không bao gồm InitializeComponent, nhưng tôi cũng tạo ra lỗi chính xác giống như bạn làm (sự kiện không kiểm tra đối với args).

+0

Phương thức InitializeComponent có được gọi trong hàm tạo MainWindow theo mặc định không? –

+3

Bạn có thể vừa xóa 'InitializeComponent' khỏi hàm tạo của lớp' MainWindow'. Điều này là bắt buộc để chạy mã trong mã do nhà thiết kế tạo ra (tệp MainWindow.g.cs bạn có thể đã phát hiện) – Charleh

+0

Ah ha! Có, tôi phải xóa InitializeComponent() từ hàm tạo. Thêm nó trở lại cố định vấn đề. Bất cứ ai có thể giải thích lý do tại sao nó đã làm việc làm việc khi tôi sử dụng StartupUri? –

0

Tôi đã tạo một ứng dụng mẫu và xóa StartupUri và đặt Khởi động thành phương thức bạn đã cung cấp. Tất cả mọi thứ dường như làm việc như mong đợi, nội dung của cửa sổ được hiển thị, vì vậy có thể, như Daniel đã đề cập, bạn đang thiếu cuộc gọi đến phương thức InitializeComponent trong hàm tạo MainWindow của bạn.

Các vấn đề liên quan