我设法学习如何制作手机应用程序。我对c#和xaml完全不熟悉。但我已经为基础知识做了视觉基础。
我正在尝试在Windows手机中重新创建我的项目,并且我在计时器中有基本的进度条,但是当计时器到达它结束时,我希望它导航到我创建的新页面。我见过许多不同的例子,但没有一个帮助它要么不起作用,要么有错误。
这是MainPage上的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using System.Windows.Threading;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using ProgramOSMobile.Resources;
namespace ProgramOSMobile
{
public partial class MainPage : PhoneApplicationPage
{
private DispatcherTimer timer;
private int i, j;
public MainPage()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Tick += timer_tick;
Init();
timer.Start();
}
private void Init()
{
j = i = Convert.ToInt32(3);
timer.Interval = TimeSpan.FromMilliseconds(i);
}
private void timer_tick(object sender, EventArgs e)
{
progressBar1.Value = i;
i = i + j;
if (i == 1010)
{
timer.Stop();
}
}
}
}
这一切都有效,但在使用此代码时,例如:
NavigationService.Navigate(new Uri("/LoginScreen.xaml", UriKind.Relative));
或者确实是手机8.1的新版本:
this.Frame.Navigate(typeof(LoginScreen));
我在'Frame'部分出错了。
对于这个很长的问题很抱歉,但这真让我感到困惑。
谢谢, 丹
答案 0 :(得分:1)
我可以看到您正在使用Windows Phone 8.1 Silverlight项目,并且您使用的错误在WinRT版本中使用。这是定时器后导航的代码。
表示WinRT protected override void OnNavigatedTo(NavigationEventArgs e) {
var timer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(300) };
timer.Start();
timer.Tick += ((ax, by) =>
{
timer.Stop();
Loader.IsActive = false;
this.Frame.Navigate(typeof(HomePage));
});
}
和适用于您正在使用的Silverlight项目
public MainPage()
{
InitializeComponent();
Loaded+=MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var timer = new System.Windows.Threading.DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(2);
timer.Start();
timer.Tick += ((ax, by) => { timer.Stop();
NavigationService.Navigate(new Uri("/Source Code/Recieve.xaml", UriKind.RelativeOrAbsolute));
});
}
您正在使用Init方法初始化计时器,您可以根据需要修复我做的或动态的。如果抛出任何错误,则检查输出中的异常可能是因为下一页上的Xaml错误,即HomePage。希望它有所帮助。
答案 1 :(得分:0)
以下代码对我有用..试一试
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using System.Windows.Threading;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using ProgramOSMobile.Resources;
namespace ProgramOSMobile
{
public partial class MainPage : PhoneApplicationPage
{
DispatcherTimer timer = new DispatcherTimer();
int tick=0;
public MainPage()
{
InitializeComponent();
timer.Interval = TimeSpan.FromSeconds(0.5);
timer.Start();
timer.Tick += new EventHandler(splash);
}
private void splash(object sender, EventArgs e)
{
tick++;
if(tick==5){
NavigationService.Navigate(new Uri("/Menu.xaml", UriKind.Relative));
}
}
}
}
上述代码的计时器间隔为0.5秒,时间刻度率为1