2012-04-23 24 views
26

Khi chạy chương trình của tôi bằng cách nhấp vào Run hoặc nhấn Ctrl + F5, bạn có thể mở các cửa sổ khác nhau dựa trên một số điều kiện kiểm tra không?WPF - chọn cửa sổ khởi động dựa trên một số điều kiện

I.e nếu một số điều kiện được thỏa mãn, tôi muốn mở một cửa sổ cụ thể, nhưng nếu nó không phải tôi muốn mở một cửa sổ khác.

Nó nên được như thế trước khi mở bất kỳ cửa sổ nó đầu tiên nên kiểm tra các điều kiện như

if(File.Exists(<path-to-file>) 
    Open Window 1 
else 
    Open Window 2 

Đây có phải là có thể?

+1

Thông tin chi tiết đang rất cần thiết ở đây, về "một số điều kiện", "cửa sổ mới", "một cửa sổ", vv – Alex

+0

Xin lỗi alex .. Tôi chỉ cần thêm một miếng mà làm cho dễ hiểu hơn –

+0

@ Alex Tôi nghĩ anh ta có nghĩa là anh ta có hai cửa sổ. Khi bắt đầu chương trình, bạn nên chọn một trong các cửa sổ này dựa trên một số điều kiện. sai sindhu: đúng không? – Default

Trả lời

54

nhìn vào App.xaml

loại bỏ StartupUri="MainWindow.xaml"

thêm Startup="Application_Startup" mới sự kiện Handler

<Application x:Class="YourProject.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Startup="Application_Startup"> 

mẫu mã đằng sau App.xaml.cs tạo Application_Startup như ...

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     //add some bootstrap or startup logic 
     var identity = AuthService.Login(); 
     if (identity == null) 
     { 
      LoginWindow login = new LoginWindow(); 
      login.Show(); 
     } 
     else 
     { 
      MainWindow mainView = new MainWindow(); 
      mainView.Show(); 
     } 
    } 
+0

đừng quên bao gồm 'using System.Windows;' – Multinerd

+0

Điều thú vị là bạn phải hết sức cẩn thận khi tạo cửa sổ. Tôi đã có một hộp thoại đăng nhập đã phải mở trước MainWindow, vì vậy tôi đã làm điều này, và sau khi LoginDialog đóng, ứng dụng đã kết thúc. Tôi đã sửa nó bằng cách khởi tạo MainWindow đầu tiên mà không thực sự hiển thị nó, và sau đó * sau khi * hộp thoại Đăng nhập đóng, chạy nó. – TheXDS

1

Trong App.xaml chúng tôi có một thẻ Application có thuộc tính StartupUri. Tôi nghĩ bạn nên viết mã này trong phần App.xaml.cs

public App() 
{ 
     // Your Code 
} 

và đặt StartUpUri thành tệp xaml mong muốn.

+0

Hãy nhớ gọi hàm tạo cơ sở để vẫn có hành vi thông thường, vì vậy: 'public App(): base() {...}', nếu không ứng dụng sẽ không tải cửa sổ của bạn. –

6

Bạn có thể sử dụng App.xaml để khởi động ứng dụng của bạn và nếu bạn thích, như Nikhil Agrawal nói, hãy thay đổi StartupUri một cách năng động.

Nhưng bạn vẫn có thể khởi động ứng dụng của mình từ public static void Main(). Chỉ cần xóa StartupUri="MainWindow.xaml" trong App.xaml, tạo program.cs chứa phương thức chính.

[STAThread] 
public static void Main(string[] args) 
{ 
    MainWindow mainWindow = new MainWindow(); 

    var app = new Application(); 

    app.Run(mainWindow); 
} 
Các vấn đề liên quan