如何使用计时器导航到手机 SDK 8.1 (xaml c#) 中的其他页面

本文关键字:xaml 其他 导航 计时器 何使用 手机 SDK | 更新日期: 2023-09-27 18:36:28

我设法学习如何制作手机应用程序。我对 c# 和 xaml 完全陌生。但是我已经做了视觉基础到基础知识。

我正在尝试在 Windows Phone 中重新创建我的项目,并且在计时器中有基本的进度条,但是当计时器到达结束时,我希望它导航到我创建的新页面。我见过许多不同的例子,但没有一个帮助它要么不起作用,要么有错误。

这是主页上到目前为止的代码:

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));

我在"框架"部分收到错误。

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

谢谢担

如何使用计时器导航到手机 SDK 8.1 (xaml c#) 中的其他页面

正如我所看到的,您正在使用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 错误。希望对您有所帮助。

以下代码对我有用..试试看

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