保存图像(页面状态)

时间:2014-10-21 19:24:24

标签: c# windows-phone-8

我有一个应用程序,要求用户从他的照片库中选择和成像,然后允许他在图像上添加文本或其他对象。但是,一旦用户选择主图像并在他向后导航时导航到辅助页面,图像就会消失。我无法弄清楚这一点。我希望这是我忽略的一些简单。

感谢

下面的

是我可以测试的快速示例。我包括一个主图像和两个按钮,一个用于选择图片,另一个用于导航到第二个页面,第二个页面只有一个按钮可以导航回主页面。

 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));
    }

2 个答案:

答案 0 :(得分:0)

这是你的问题:

 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将为您处理已创建的主页的后退导航。

答案 1 :(得分:0)

@thumbmunkeys已经说明了你的问题。您不能在导航堆栈中创建任何循环,最好将它们放在树状结构中。如果您仍然愿意使用额外的后退按钮,请使用以下代码:

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

这将从后堆栈中删除一个条目。但是,仍有可能用户点击硬件返回键,在这种情况下,您的附加代码将不会被执行。更好的选择是使用PhoneApplicationPage.OnBackKeyPress method后退按钮。

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

系统将处理后台堆栈,您将能够完成您正在寻找的内容。