所以我试图在 WP7 中做一件非常简单的事情,比如:
MainPage中的一个按钮将启动相机,当相机成功拍照时,我想将图片传递给SecondPage并启动它。
这是我的代码:
在 MainPage 构造函数中,我初始化相机任务并设置委托:
camTask.Completed += new EventHandler<PhotoResult>(camTask_Completed);
然后我实施了camTask_Completed
void camTask_Completed(object sender, PhotoResult e)
{
//throw new NotImplementedException();
img = PictureDecoder.DecodeJpeg(e.ChosenPhoto);
NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
}
该应用程序将在我拍照后按“接受”之前正常运行。
异常说:
Exception {"Navigation is not allowed when the task is not in the foreground."} System.Exception {System.InvalidOperationException}
我的理解是我不应该在方法中启动 SecondPage camTask_Completed
。
那么我的问题是:如何在 EventHandler 的结果上启动另一个页面?
谢谢
更新:(有关此子问题的答案,请参阅此页面中的此评论)
单击按钮后我发现另一个错误(启动相机):
它抛出一个异常说:
"Type 'System.Windows.Media.Transform' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute."
我在哪里可以序列化这些Transform
东西?
我在谷歌上做了一些搜索,发现了这个:
找到了答案,错误实际上也暗示了它:)
[数据合约]
[KnownType(typeof(System.Windows.Media.MatrixTransform))]
似乎它可以解决这个问题,但我应该把这些线放在哪里?
这是我在 MainPage 上将图像传递给 SecondPage 的代码,img
是WriteableBitmap
:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
var brush = new ImageBrush();
brush.ImageSource = img;
PhoneApplicationService.Current.State["bkg"] = brush;
}
再次感谢。