NavigationService
用Navigate打开某一页:
this.NavigationService.Navigate(new Uri(“/InstructionsPage.xaml”,UriKind.Relative));
还可以用GoBack和GoForward打开某一页。
用GoBack和GoForward打开的是之前打开过的那个页面的实例,但是用Navigate打开的就是一个新实例了。
不要出现back和forward按钮,back有物理按钮,forward没有必要。GoForward会将当前页压入back stack,并清空forward stack。
如果要特意强调可以取消,可以用取消按钮。
页面间传递数据
1. 静态变量。
2. query string: 用携带的参数传递数据,限制:只能向前传,无法向后传,参数要方便用字符串表达。
this.NavigationService.Navigate(
new Uri(“/DetailsPage.xaml?categoryIndex=” + this.categoryIndex + “&signIndex=” + this.ListBox.SelectedIndex, UriKind.Relative));
给参数赋值
if (this.NavigationContext.QueryString.ContainsKey(“categoryIndex”)) 是否包含某个参数
int.Parse(this.NavigationContext.QueryString[“categoryIndex”]) 解析出参数
Data Binding
可以先在xaml中设置好绑定,C#代码中给DataContext赋值来完成绑定。
例如:this.DataContext = sign;
DataContext的类型是object,所以可以用任何一个对象为其赋值。页面上的子元素会继承其父元素的DataContext。
另外,有ItemSource属性绑定起来比较简单。
例如:
foreach (Sign sign in Data.Categories[this.categoryIndex].Signs)
{
this.ListBox.Items.Add(sign);
}
因为ListBox有ItemSource属性,因此可以如下调用:
this.ListBox.ItemsSource = Data.Categories;
INotifyPropertyChanged接口
绑定对象的某个属性使其UI自动更新,要让该对象的类别实现INotifyPropertyChanged接口,方法如下:
public class UserInfo : INotifyPropertyChanged { public string UserName { get; set; } private int age; public int Age { get { return this.age; } set { if (this.age != value) { this.age = value; OnPropertyChanged("Age"); } } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = this.PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion }
更多数据绑定的知识,参考http://www.cnblogs.com/Jax/archive/2009/10/13/1582128.html
图片的Strech属性
Uri什么时候该以/开头
Navigation URI 必须有
指向BuitldAction=Resource的资源文件的URI 必须没有
指向BuitldAction=Content的资源文件的URI 有没有都行
可以简单记:Navigation URI有,资源文件没有。
每个App都应该有个About Page
获得版本号的方法:
try { string s = typeof(AboutPage).Assembly.ToString(); // s形如:WindowsPhoneApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null if (s != null && s.IndexOf("Version=") >= 0) { s = s.Substring(s.IndexOf("Version=") + "Version=".Length); s = s.Substring(0, s.IndexOf(",")); this.VersionTextBlock.Text = "version " + s; } } catch { /* Never mind! */ }这样就只需更改程序集的版本号,用户看到的版本号也会自动更新了。