簡體   English   中英

保存圖像(頁面狀態)

[英]Save image (page state)

我有一個應用程序,要求用戶從他的照片庫中進行選擇並進行圖像處理,然后允許他在圖像上添加文本或其他對象。 但是一旦用戶選擇了主圖像並在導航時向后導航到輔助頁面,圖像就消失了。 我不知道這個。 我希望這是我忽略的簡單事情。

謝謝

以下是我可以測試的快速示例。 它由一個主圖像和2個按鈕組成,一個按鈕選擇圖片,另一個按鈕導航到第二頁,第二個頁面只有一個按鈕導航回主頁。

 public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    PhotoChooserTask photoChooserTask;


    public MainPage()
    {
        InitializeComponent();

        // Sample code to localize the ApplicationBar
        //BuildLocalizedApplicationBar();
    }

    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        photoChooserTask = new PhotoChooserTask();
        photoChooserTask.Completed += new EventHandler<PhotoResult>(photoChooserTask_Completed);
        photoChooserTask.Show();
    }

    void photoChooserTask_Completed(object sender, PhotoResult e)
    {
        //Code to display the photo on the page in an image control named myImage.

        BitmapImage pic = new BitmapImage();
        if (pic != null)
        {
            pic.SetSource(e.ChosenPhoto);
            e.ChosenPhoto.Position = 0;
        }
        else
        {
        }

        imgMain.Source = pic;
        //  appsettings.Add("_imgMain", pic);

    }

    private void btnPage_Click(object sender, RoutedEventArgs e)
    {
        NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
    }

第二頁

 public Page1()
    {
        InitializeComponent();
    }

    private void btnGoBack_Click(object sender, RoutedEventArgs e)
    {
        NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    }

這是您的問題:

 private void btnGoBack_Click(object sender, RoutedEventArgs e)
 {
    // <<<<< Creates new page >>>>>>>>
    NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
 }

當按下后退按鈕時,您導航到一個新的主頁,有效地實例化具有新狀態和控件的新頁面。

您可以通過導航創建此后退堆棧:

   Main => Page1 => Main

刪除該導航代碼,Windows Phone OS將為您處理向后導航到已經創建的主頁。

@thumbmunkeys已經說明您的問題。 您不得在導航堆棧中創建任何循環,最好將它們做成樹狀結構。 如果您仍然願意使用額外的后退按鈕,請使用以下代碼:

private void btnGoBack_Click(object sender, RoutedEventArgs e)
{
    //your additional code here
    NavigationService.GoBack();
}

這將從后堆棧中刪除一個條目。 但是,仍然有機會用戶按下硬件后退鍵,在這種情況下,您的其他代碼將不會執行。 更好的選擇是使用安裝有后退按鈕的PhoneApplicationPage.OnBackKeyPress方法

protected override void OnBackKeyPress(CancelEventArgs e)
{
    base.OnBackKeyPress(e);
    //your additional code here  
}

系統將處理后退堆棧,您將能夠完成所需的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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