我试图为Windows Phone编写一个闹钟应用程序,要求用户在响铃时解决数学问题。现在我卡住了,我已经让MainPage包含了打开闹钟的设置,当闹钟响起时,用户被重定向到另一个xaml页面,需要用户输入答案随机生成的数学问题,以关闭警报。我的问题是,一旦用户解决问题并点击复选框,应用程序应该首先将alarmSet值设置为false,并将用户重定向回主页:
private void Solve_Click(object sender, EventArgs e)
{
this.userSolve = Convert.ToInt32(answerInput.Text);
if (userSolve != answer)
{
MessageBox.Show("Incorrect");
//userAnswerInt = Convert.ToInt32(answerInput.Text);
}
else if (userSolve == answer)
{
MainPage.alarmSet.Value = false;
NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
}
然后当用户到达mainPage时,OnLoaded方法应该停止警报声并将所有内容重置为正常:
public async void OnLoaded(object sender, EventArgs e)
{
this.timer.Stop();
this.alarmSound.Stop();
alarmSet.Value = false;
this.notificationSwitch.IsChecked = alarmSet.Value;
this.timePicker.Value = new DateTime(1, 1, 1,
alarmTime.Value.Hours,
alarmTime.Value.Minutes,
0
);
if (alarmSet.Value == true)
this.alarmTimeText.Text = alarmTimeString;
else if (alarmSet.Value == false)
this.alarmTimeText.Text = "alarm off";
但问题是,每次用户解决数学问题时,他们都会被带回主页并立即重定向回警报响铃页面,因为警报仍然打开。这会产生一个无限循环的警报相互重叠,我无法弄清楚为什么,即使我在导航回主页面之前将alarmSet.Value设置为false,警报仍然被视为打开...是还有什么我需要做的吗?如何在没有立即响铃的情况下打开闹钟并将其设置为时钟所在的当前分钟?
答案 0 :(得分:2)
我在Windows Phone的应用程序生命周期中没有看到“OnLoaded”事件。
参考:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff817008(v=vs.105).aspx
您可以执行以下操作:
在Mainpage.xaml中,查看闹钟是否正在运行以及alarmSet是否为true,将用户重定向到onNavigatedTo Event下的下一页。
在下一页中,将alarmSet设置为false并将用户重定向到MainPage.xaml。然而,onNavigatedTo将再次被触发,因为alarmSet为false,用户不会被重定向到任何地方。你可以做其他情况下停止警报或其他任何事情。