如何使用计时器导航到手机sdk 8.1(xaml c#)中的不同页面

时间:2016-02-27 18:09:14

标签: c# xaml windows-phone-8.1

我设法学习如何制作手机应用程序。我对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'部分出错了。

对于这个很长的问题很抱歉,但这真让我感到困惑。

谢谢, 丹

2 个答案:

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