我正在写一个高尔夫应用程序。每个人在每个洞的文本框中输入他的分数,然后可选地导航到另一个页面。 我遇到的问题是,当我点击另一个页面然后返回该页面时,我希望数字保持在那里。怎么办呢?
这是我的文本框和文本块的代码:
private void Calculate_Click(object sender, RoutedEventArgs e)
{
int x1 = 0;
Int32.TryParse(textBox1.Text, out x1);
int x2 = 0;
Int32.TryParse(textBox2.Text, out x2);
int x3 = 0;
Int32.TryParse(textBox3.Text, out x3);
int x4 = 0;
Int32.TryParse(textBox4.Text, out x4);
int x5 = 0;
Int32.TryParse(textBox5.Text, out x5);
int x6= 0;
Int32.TryParse(textBox6.Text, out x6);
int x7 = 0;
Int32.TryParse(textBox7.Text, out x7);
int x8 = 0;
Int32.TryParse(textBox8.Text, out x8);
int x9 = 0;
Int32.TryParse(textBox9.Text, out x9);
int[] totalScore = new int[10];
totalScore[0] = x1;
totalScore[1] = x2;
totalScore[2] = x3;
totalScore[3] = x4;
totalScore[4] = x5;
totalScore[5] = x6;
totalScore[6] = x7;
totalScore[7] = x8;
totalScore[8] = x9;
int sum = totalScore.Sum();
TotalBlock.Text = sum.ToString();
}
答案 0 :(得分:2)
导航到页面时会实例化页面(假设您是 在Silverlight上运行)。当你离开它时,状态会 被保存在堆栈中。如果你导航回来(通过调用GoBack 在NavigationService类上的方法)页面将从中恢复 它的状态,没有调用构造函数。
但是,如果您离开现有页面并重新导航 通过调用Navigate方法到页面,这是一个全新的实例 页面被实例化,因此将调用构造函数 试。
另请参阅:Windows phone 7 - the page life cycle
这意味着如果您使用的是导航方法,则所有字段都为空,因为会创建新的页面实例。
如果要保持TextBlock
控件的状态,则必须临时存储内容。您可以通过添加以下using语句使用IsolatedStorageSettings
来实现此目的:
using System.IO.IsolatedStorage;
您现在可以将字符串(在您的情况下为TextBlock
内容)保存到隔离存储中,如下所示:
public void SaveStringObject()
{
var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("myContent", "foobar");
}
在导航方法中调用SaveStringObject
方法后,您需要通过调用IsolatedStorageSettings.Save方法来保存设置。
如果您回到包含TextBlock控件的页面,您可以使用此代码检索TextBlock控件的内容:
TotalBlock.Text = settings["myContent"].ToString();
发布的代码片段不完整。您可以在此处获得使用IsolatedStorage的好示例:IsolatedStorage Sample