5

私は学生で、C#WPFアプリケーションを構築しています。3つのウィンドウがあります。

  1. サインインウィンドウ

  2. アカウントの作成ウィンドウ

  3. およびメインアプリケーションウィンドウ。

実装しようとしているナビゲーションのタイプを示す図をアップロードしました。

http://picturepush.com/public/8870554

別のウィンドウのclose/loadイベント内でウィンドウを表示/非表示にするのは正しくないと思います。

  1. 誰かがこのナビゲーションを実装する正しい方法を教えてもらえますか?

  2. また、3つのウィンドウをアプリケーションクラスのプライベートプロパティにするのは良い習慣ですか?

  3. 最後のウィンドウには、ページナビゲーションをサポートするフレームコントロールがあります。繰り返しますが、MainWindowアプリケーションの3ページのプライベートプロパティを作成する方が良いですか?

これが非常に明白であるか、簡単にできる場合は、申し訳ありません。ありがとう

4

4 に答える 4

0

私は現在、あなたのアプリケーションに多かれ少なかれ似ているSilverlightアプリケーションに取り組んでいます。私が感じているのは、2つのxamlコントロール(1つはログイン用、もう1つはメインアプリケーション用)を持つことができるということです。アカウントの作成には、ログインコントロールから呼び出される子ウィンドウを使用できます。また、メインアプリケーションでTabControlを使用して、他の3つのxamlコントロール(Page1.xaml、Page2.xaml、Page3.xaml)を保持します。問題がないかお気軽にお問い合わせください。

それがあなたの問題を解決するならば、私の返事を答えとしてマークすることを忘れないでください。

于 2013-02-19T17:08:50.227 に答える
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();
    }
}
于 2013-01-22T20:28:05.973 に答える
0

アプリケーションのプロパティとして 3 つのウィンドウはありません。サインイン ウィンドウのコピーをインスタンス化し、それを中心的な制御ポイントとして使用します。

ユーザーがログインすると、サインイン ウィンドウが非表示になり、新しいメイン ウィンドウが表示され、メイン ウィンドウの Closed イベントにフックが追加されます。

例えば

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()

それが役立つことを願っています...

于 2012-08-01T12:58:50.210 に答える