2012-08-01 50 views
5

我是一名學生,正在構建一個C#WPF應用程序。它有三個窗口:獨立顯示/隱藏窗口的最佳方法

  1. 登錄窗口

  2. 創建帳戶窗口

  3. 和主要應用程序窗口。

我上傳了一個用以顯示導航的類型,我想實現:

http://picturepush.com/public/8870554

我不認爲這是正確的,使一個窗口出現關閉內部/隱藏/另一個窗口的加載事件。

  1. 有人可以告訴我正確的方式來實現此導航?

  2. 另外,這是一個很好的做法,使三個窗口私有屬性的應用程序類?

  3. 最後一個窗口有一個框架控件來支持頁面導航。再次,做三個頁面的MainWindow應用程序的私有屬性更好嗎?

對不起,如果這是如此明顯或容易做到。 謝謝

+0

的問題是確實不壞,但像計算器的平臺上很難,所以我怕你不會得到良好的擬合的答案。至少有一些想法:爲什麼窗口必須是應用程序類的屬性?如果他們是模態對話框,他們應該創建就地,然後直接破壞(當然主窗口除外)。不,關閉和加載顯然不是最好的主意,因爲所有者窗口尚未顯示。只需在需要的地方創建對話框,並將當前的模式窗口設置爲所有者。 – dowhilefor 2012-08-01 08:28:18

回答

0

我不會有三個窗口作爲應用程序的屬性。我會立即登錄一個登錄窗口的副本,並將其作爲我的中心控制點。

當用戶登錄時,隱藏登錄窗口,顯示一個新的主窗口並在主窗口Closed事件中添加一個鉤子。

e.g

if (logonSuccess) 
{ 
    var mainWindow = new MainWindow(); 
    mainWindow.Closed += ReshowSignupWindow; 
} 

我也不得不在登錄窗口中執行了創建賬戶的窗口相同。因此,我會將創建帳戶窗口返回到註冊窗口,該窗口既可以重新顯示自身,也可以在創建帳戶時啓動主窗口。

例如爲:

// In sign-in window, handle the create window being closed 
private void CreateWindowClosedHandler(object sender, EventArgs e) 
{ 
    if (accountCreatedOK) 
    { 
     ShowMainWindow(); 
    } 
    else 
    { 
     ReshowSignupWindow(); 
    } 
} 

我可能會看具有如通過對ShowDialog()呼叫的對話窗口中創建帳戶窗口。

希望幫助...

0

事情是這樣的代碼可能做到這一點(未經測試,我剛纔輸入它在Visual Studio中自動套用格式的代碼) 的XAML是登錄對話框。 RegistrationDialog應該類似,除了註冊按鈕的按鈕和處理程序。

<Window x:Class="WpfApplication1.LoginWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="LoginWindow"> 
    <StackPanel> 
     <Button IsDefault="True" Content="Submit" Click="SubmitButton_Click"/> 
     <Button IsCancel="True" Content="Cancel" /> 
     <Button Content="CreateAccount" Click="CreateAccountButton_Click"/> 
    </StackPanel> 
</Window> 

//Handler of LoginWindow and RegistrationWindow 
private void SubmitButton_Click(object sender, RoutedEventArgs e) 
{ 
    this.DialogResult = true; 
} 

//Handler of LoginWindow only 
private void CreateAccountButton_Click(object sender, RoutedEventArgs e) 
{ 
    this.IsCreatingAccount = true; 
    this.DialogResult = false; 
} 

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     bool isCanceled; 

     while (loginWin.ShowDialog() == false && !isCanceled) 
     { 
      if (loginWin.IsAccountCreationRequested) 
      { 
       if (registrationWin.ShowDialog()) 
       { 
        isCanceled = true; 
       } 
       else 
       { 
        loginWin.IsAccountCreationRequested = false; 
       } 
      } 
      else 
      { 
       isCanceled = true; 
      } 
     } 

     if (loginWin.DialogResult) MainWindow.Show(); 
    } 
} 
0

我目前正在研究一個或多或少類似於您的應用程序的Silverlight應用程序。我覺得你可以有2個xaml控件(一個用於登錄,另一個用於你的主應用程序)。對於創建帳戶,您可以使用從登錄控件調用的子窗口。並在主應用程序中使用一個TabControl,它可以容納其他3個xaml控件(Page1.xaml,Page2.xaml和Page3.xaml)。隨意問你是否有任何問題。

如果它解決了您的問題,請不要忘記標記我的答案爲答案。

0

我建議你遵循這個模式。您的邏輯看起來與UI(用戶界面)和邏輯緊密結合。

我喜歡的最佳模式是WPF或Silverlight,它是MVVM(模型視圖視圖模型)。在MVVM中有很多谷歌示例可用。

只要看一眼任何MVVM的例子,你就會明白在開發WPF或Silverlight應用程序。

一些鏈接低於, http://msdn.microsoft.com/en-us/magazine/dd419663.aspx http://www.c-sharpcorner.com/UploadFile/raj1979/simple-mvvm-pattern-in-wpf/ http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute