簡體   English   中英

windows 手機中的應用欄 7

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM