2011-07-01 72 views
0

我想在我的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"); 
    } 

誰能幫我一下吧。謝謝。

+0

你打電話的任何發射或挑肥揀瘦(像'PhotoChooserTask')在該網頁上? – keyboardP

+0

沒有不調用任何發射或挑肥揀瘦 –

回答

1

,我能想到的一個可能的情況是,庫頁有一個沉重的構造函數,以便瀏覽該頁面需要這麼長時間。這種情況可能會導致您錯誤地點擊按鈕兩次,並且您認爲第一個按鈕已經被觸發,但您的線程仍在考慮構建下一頁。

嘗試一個非常簡單的信息框,而不是瀏覽,看看這個猜測是真的。

如果是的話,儘量使你的頁面的構造儘可能輕,做你的數據加載「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線程用戶界面的變化,否則你會得到「紹興德勝線程異常」。 (這就是爲什麼我們調用Dispatcher.BeginInvoke中的代碼)。

+0

對不起你所說的做我的數據加載Asynchronus意思? –

+0

我添加了新評論 –

相關問題