[英]Application bar in windows phone 7
我正在嘗試在我的 windows phone 7 應用程序中創建一個應用程序欄。 但我認為點擊事件存在一些問題,因為有時它有效,有時它不起作用。
下面是xaml
和.cs
中的代碼。
xaml
<shell:ApplicationBar IsVisible="True" IsMenuEnabled="False">
<shell:ApplicationBarIconButton IconUri="/Icons/appbar.edit.rest.png" Text="Edit" Click="btnEdit_Click" IsEnabled="True"/>
<shell:ApplicationBarIconButton IconUri="/Icons/appbar.delete.rest.png" Text="Delete" Click="btnDelete_Click" IsEnabled="True"/>
<shell:ApplicationBarIconButton IconUri="/Icons/appbar.feature.email.rest.png" Text="Email" Click="btnEmail_Click" IsEnabled="True"/>
<shell:ApplicationBarIconButton IconUri="/Icons/appbar.back.rest.png" Text="Back" Click="btnBack_Click" IsEnabled="True"/>
</shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>
。CS
void btnBack_Click(object sender, EventArgs e)
{
NavigationService.Navigate(new Uri("/Library.xaml", UriKind.Relative));
}
void btnDelete_Click(object sender, EventArgs e)
{
MessageBox.Show("Can click");
}
任何人都可以幫助我。 謝謝。
我能想到的一種可能情況是庫頁面有一個沉重的構造函數,因此導航到該頁面需要很長時間。 這種情況可能會產生一種錯覺,即您點擊按鈕兩次三次,並且您認為它不起作用,而第一個按鈕已經被觸發,但您的線程仍在考慮構建下一頁。
嘗試一個非常簡單的消息框而不是導航,看看這個猜測是否屬實。
如果是,則嘗試使您的頁面構造函數盡可能輕,並在“Asynchronus”和“OnNavigatedTo”中加載數據。
對於數據加載:您可能正在閱讀要在庫頁面上加載的項目列表。 加載項目需要從文件系統、web 服務或任何其他耗時且可能阻塞 UI 的媒體中讀取它們。 您需要在 OnNavigatedTo 中執行此操作(以確保它在用戶導航到頁面后啟動)並且像這樣異步:
public override void OnNavigatedTo(...)
{
System.Threading.ThreadPool.QueueUserWorkItem(LoadData);
}
void LoadData(object o)
{
res = // load data from media.
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// add res to your page
});
}
您直接在頁面后面的代碼中編寫的任何內容都將在 UI 線程上運行(由單獨線程處理的動畫除外)。 因此,您需要將與 UI 無關的任務保留在單獨的線程中(如上所示)。
請注意,您仍然需要在 UI 線程中觸發 UI 更改,否則您將獲得“Corss-thread 異常”。 (這就是我們在 Dispatcher.BeginInvoke 中調用代碼的原因)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.