我是一名学生,正在构建一个 C# WPF 应用程序。它有三个窗口:
登录窗口
创建帐户窗口
和主应用程序窗口。
我上传了一个图来显示我正在尝试实现的导航类型:
我认为在另一个窗口的关闭/加载事件中显示/隐藏一个窗口是不正确的。
有人可以告诉我实现此导航的正确方法吗?
另外,将应用程序类的三个窗口私有属性设置为一个好习惯吗?
最后一个窗口有一个框架控件来支持页面导航。同样,将 MainWindow 应用程序的三个页面设为私有属性会更好吗?
如果这很明显或很容易做到,我很抱歉。谢谢
我是一名学生,正在构建一个 C# WPF 应用程序。它有三个窗口:
登录窗口
创建帐户窗口
和主应用程序窗口。
我上传了一个图来显示我正在尝试实现的导航类型:
我认为在另一个窗口的关闭/加载事件中显示/隐藏一个窗口是不正确的。
有人可以告诉我实现此导航的正确方法吗?
另外,将应用程序类的三个窗口私有属性设置为一个好习惯吗?
最后一个窗口有一个框架控件来支持页面导航。同样,将 MainWindow 应用程序的三个页面设为私有属性会更好吗?
如果这很明显或很容易做到,我很抱歉。谢谢
像这样的代码可能会这样做(未经测试,我只是在 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();
}
}
我目前正在开发一个与您的应用程序或多或少相似的 Silverlight 应用程序。我觉得您可以拥有 2 个 xaml 控件(一个用于登录,另一个用于您的主应用程序)。对于创建帐户,您可以使用将从登录控件调用的子窗口。并在您的主应用程序中使用 TabControl,它将保存您的其他 3 个 xaml 控件(Page1.xaml、Page2.xaml 和 Page3.xaml)。如果您有任何问题,请随时询问。
如果它解决了您的问题,请不要忘记将我的回复标记为答案。
我不会将三个窗口作为应用程序的属性。我会实例化登录窗口的副本并将其用作我的中心控制点。
当用户登录时,隐藏登录窗口,显示一个新的主窗口并在主窗口关闭事件上添加一个钩子。
例如
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()
。
希望有帮助...
我建议你遵循这个模式。您的逻辑看起来与 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