C# 初始化WP8应用程序
我想初始化我的应用程序并根据以下条件启动C# 初始化WP8应用程序,c#,windows-phone-8,C#,Windows Phone 8,我想初始化我的应用程序并根据以下条件启动 If(UserloggedIn) start from homepage.xaml else login.xaml 我知道必须有一个非常简单和直接的方法,因为这是一个简单的场景。请让我知道路。我想你想要的是编辑App.xaml.cs文件 您还可以在App.xaml.cs中执行一些其他有用的操作,您需要做的是使用自定义UriMapper,它将实际检查用户是否登录,并根据需要调整导航 肖恩·肯德罗特的博客上有一个完整的例子:好的。我不会假装
If(UserloggedIn)
start from homepage.xaml
else
login.xaml
我知道必须有一个非常简单和直接的方法,因为这是一个简单的场景。请让我知道路。我想你想要的是编辑
App.xaml.cs
文件您还可以在
App.xaml.cs
中执行一些其他有用的操作,您需要做的是使用自定义UriMapper
,它将实际检查用户是否登录,并根据需要调整导航
肖恩·肯德罗特的博客上有一个完整的例子:好的。我不会假装我的解决方案是最简单或最好的。就是这样,我已经在我的应用程序中实现了它 首先,创建一个登录页面。这将是你应用程序的第一页。因此,在WMAppManifest中设置应用程序的第一页:
<Tasks>
<DefaultTask Name="_default" NavigationPage="LoginPage.xaml" />
</Tasks>
所以,如果用户登录,他将被导航到应用程序的主页面
如果用户未登录,则应在登录页面UI中写入其凭据。然后,若凭证检查正常,他也将被导航到登录页面
这是基本的想法
但也有一些问题需要解决。 主要的一点是,用户可以使用后退按钮返回登录页面,这并不酷 因此,我推荐这种解决方案: 1) 默认情况下,您使登录页控件不可见。 2) 您可以在登录页面覆盖OnNavigatedTo和OnBackKeyPress方法:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (e.NavigationMode == NavigationMode.Back)
{
App.Quit();
}
}
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
App.Quit();
}
3) 如果用户登录,他将被导航到主页。
如果没有,请使页面上的凭证控件可见
结果,用户a)如果登录,将无法看到任何凭据控件。(导航只需要几次时间,但他仍然可以看到登录页面,该页面将为空)b)无法使用“后退”按钮返回登录页面。(应用程序将关闭)
顺便说一句,退出方法是:
public static void Quit()
{
if (Environment.OSVersion.Version.Major < 8)//try to load XNA assemblies (only working on WP7)
{
System.Reflection.Assembly asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553");
asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553");
Type type = asmb.GetType("Microsoft.Xna.Framework.Game");
object obj = type.GetConstructor(new Type[] { }).Invoke(new object[] { });
type.GetMethod("Exit").Invoke(obj, new object[] { });
}
else// => WP8
{
Type type = Application.Current.GetType();
type.GetMethod("Terminate").Invoke(Application.Current, new object[] { });
}
}
publicstaticvoidquit()
{
if(Environment.OSVersion.Version.Major<8)//尝试加载XNA程序集(仅在WP7上工作)
{
System.Reflection.Assembly asmb=System.Reflection.Assembly.Load(“Microsoft.Xna.Framework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=842cf8be1de50553”);
asmb=System.Reflection.Assembly.Load(“Microsoft.Xna.Framework.Game,Version=4.0.0.0,Culture=neutral,PublicKeyToken=842cf8be1de50553”);
Type=asmb.GetType(“Microsoft.Xna.Framework.Game”);
object obj=type.GetConstructor(新类型[]{}).Invoke(新对象[]{});
type.GetMethod(“Exit”).Invoke(obj,新对象[]{});
}
else/=>WP8
{
Type Type=Application.Current.GetType();
type.GetMethod(“Terminate”).Invoke(Application.Current,新对象[]{});
}
}
这将使应用程序与windows-phone-7兼容
以下链接可能会有所帮助:
事实上,这并不像你想象的那么简单)。首先,我应该问:如果用户已登录,如何检查。发送web请求以检查凭据(我认为这是最有可能的解决方案)?第二,在windows phone中实现登录页面通常会遇到通过Microsoft认证的问题(我保证,应用程序中的后退按钮使用会有问题),因此您需要提供更多关于您的实现的信息。不,您的技术性很强:p。我将userdetail保存在我的isolatedstorage中(只有userid和name;),因此没有技术挑战。我只需要检查isolatedstorage中可用的用户详细信息,然后从主页初始化,否则将显示我的应用程序的登录屏幕,该屏幕将与我的服务器通信并提供用户ID。我建议使用UriMapper,这样就无需清除backbackback,也无需进行不必要的页面导航,这会降低应用程序的速度。下面有一个答案表明了这一点
public static void Quit()
{
if (Environment.OSVersion.Version.Major < 8)//try to load XNA assemblies (only working on WP7)
{
System.Reflection.Assembly asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553");
asmb = System.Reflection.Assembly.Load("Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553");
Type type = asmb.GetType("Microsoft.Xna.Framework.Game");
object obj = type.GetConstructor(new Type[] { }).Invoke(new object[] { });
type.GetMethod("Exit").Invoke(obj, new object[] { });
}
else// => WP8
{
Type type = Application.Current.GetType();
type.GetMethod("Terminate").Invoke(Application.Current, new object[] { });
}
}