5

我是一名学生,正在构建一个 C# WPF 应用程序。它有三个窗口:

  1. 登录窗口

  2. 创建帐户窗口

  3. 和主应用程序窗口。

我上传了一个图来显示我正在尝试实现的导航类型:

http://picturepush.com/public/8870554

我认为在另一个窗口的关闭/加载事件中显示/隐藏一个窗口是不正确的。

  1. 有人可以告诉我实现此导航的正确方法吗?

  2. 另外,将应用程序类的三个窗口私有属性设置为一个好习惯吗?

  3. 最后一个窗口有一个框架控件来支持页面导航。同样,将 MainWindow 应用程序的三个页面设为私有属性会更好吗?

如果这很明显或很容易做到,我很抱歉。谢谢

4

4 回答 4

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

我目前正在开发一个与您的应用程序或多或少相似的 Silverlight 应用程序。我觉得您可以拥有 2 个 xaml 控件(一个用于登录,另一个用于您的主应用程序)。对于创建帐户,您可以使用将从登录控件调用的子窗口。并在您的主应用程序中使用 TabControl,它将保存您的其他 3 个 xaml 控件(Page1.xaml、Page2.xaml 和 Page3.xaml)。如果您有任何问题,请随时询问。

如果它解决了您的问题,请不要忘记将我的回复标记为答案。

于 2013-02-19T17:08:50.227 回答
0

我不会将三个窗口作为应用程序的属性。我会实例化登录窗口的副本并将其用作我的中心控制点。

当用户登录时,隐藏登录窗口,显示一个新的主窗口并在主窗口关闭事件上添加一个钩子。

例如

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 回答
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

于 2013-09-24T11:50:52.353 回答