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! */ }
這樣就只需更改程式集的版本號碼,使用者看到的版本號碼也會自動更新了。