我是一名学生,正在构建一个C#WPF应用程序。它有三个窗口:
登录窗口
创建帐户窗口
和主应用程序窗口。
我上传了一个图来显示我想要实现的导航类型:
我认为在另一个窗口的close / load事件中显示/隐藏窗口是不正确的。
有人能告诉我实施此导航的正确方法吗?
此外,将三个窗口设为应用程序类的私有属性是一个好习惯吗?
最后一个窗口有一个框架控件来支持页面导航。再次,将MainWindow应用程序的三个页面私有属性更好吗?
如果这很明显或很容易,我很抱歉。 感谢
答案 0 :(得分:0)
我不会将这三个窗口作为应用程序的属性。我会设置一个登录窗口的副本,并将其用作我的中心控制点。
当用户登录时,隐藏登录窗口,显示一个新的主窗口并在主窗口关闭事件上添加一个钩子。
e.g
if (logonSuccess)
{
var mainWindow = new MainWindow();
mainWindow.Closed += ReshowSignupWindow;
}
我还有登录窗口对创建帐户窗口执行相同操作。因此,我将创建帐户窗口返回到注册窗口,如果创建了帐户,该窗口将重新显示自身或启动主窗口。
e.g:
// In sign-in window, handle the create window being closed
private void CreateWindowClosedHandler(object sender, EventArgs e)
{
if (accountCreatedOK)
{
ShowMainWindow();
}
else
{
ReshowSignupWindow();
}
}
我可能会看到通过调用ShowDialog()
将创建帐户窗口显示为对话框窗口。
希望有帮助...
答案 1 :(得分:0)
像这样的代码可能会这样做(未经测试,我只是在visual studio中输入以自动编码代码) XAML用于登录对话框。 RegistrationDialog应该类似,除了注册Button的按钮和处理程序。
<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();
}
}
答案 2 :(得分:0)
我目前正在开发一个与您的应用程序或多或少类似的Silverlight应用程序。我觉得你可以有2个xaml控件(一个用于登录,另一个用于你的主应用程序)。对于create account,您可以使用将从登录控件调用的子窗口。并在主应用程序中使用TabControl,它将保存其他3个xaml控件(Page1.xaml,Page2.xaml和Page3.xaml)。如果您有任何问题,请随时询问。
如果它能解决您的问题,请不要忘记将我的回复标记为答案。
答案 3 :(得分: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