C# Xamarin表单:如何将媒体文件从内容页(弹出窗口)传递到另一个内容页
请注意,我正在使用Rg.Plugins.Popup执行操作。我从中捕捉照片。照片存储在MediaFile对象中。我想将MediaFile的值传递到调用弹出窗口的主页面C# Xamarin表单:如何将媒体文件从内容页(弹出窗口)传递到另一个内容页,c#,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin.forms,Xamarin.android,Xamarin.ios,请注意,我正在使用Rg.Plugins.Popup执行操作。我从中捕捉照片。照片存储在MediaFile对象中。我想将MediaFile的值传递到调用弹出窗口的主页面 **public MediaFile _mediaFile;** public async void ChoosePhotoEvent() { await CrossMedia.Current.Initialize(); if (!CrossMedia.Current.IsPickPhot
**public MediaFile _mediaFile;**
public async void ChoosePhotoEvent()
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsPickPhotoSupported)
{
await DisplayAlert("Error", "This is not support on your device.", "OK");
return;
}
else
{
var mediaOption = new PickMediaOptions()
{
PhotoSize = PhotoSize.Medium,
CompressionQuality = 10,
CustomPhotoSize = 30
};
**_mediaFile** = await CrossMedia.Current.PickPhotoAsync();
if (_mediaFile == null) return;
}
}
上面的代码显示了我从中获取数据的媒体文件。如何将此_media文件中的值传递到另一个内容页,以便在下一页中显示图像
另一个页面的StackLayout需要数据
<StackLayout Grid.Row="3" Orientation="Horizontal" HorizontalOptions="CenterAndExpand" Spacing="80" Padding="0,0,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Image x:Name="capturedImage" Source="ic_add_a_photo.png" Aspect="AspectFill" WidthRequest="35" HeightRequest="35" Margin="0,0,0,0" IsVisible="True" Grid.Row="1"/>
</Grid>
</StackLayout >
x:Name=“CapturedImage”需要保存来自弹出页面的_media文件的值您可以将流作为参数传递到下一页 在方法中,选择照片事件 在另一个内容页中 用参数定义一个新的构造函数
public xxxContentPage(ImageSource source)
{
InitializeComponent();
capturedImage.Source = source;
}
当你想弹出页面时
this.Navigation.xxxContentPage(new xxxContentPage(source));
使现代化
在您的情况下,您可以使用MessagingCenter将数据传递到最后一页。这样您就不需要设置导航
var source=ImageSource.FromStream(()=>
{
var stream=_mediaFile.GetStream();
回流;
});
发送(此“完成”,来源);
在最后一页
public Faultz()
{
初始化组件();
// ...
订阅(此“完成”,(arg,source)=>
{
capturedImage.Source=Source;
});
}
Zhang感谢您抽出时间。这种方法似乎是解决办法。但是,我使用的是Rg.Plugins.Popup。要弹出并将数据传递到另一个页面,我目前使用wait'PopupNavigation.Instance.popsync();'我试着传递构造函数和内部,就像你提到的wait-PopupNavigation.Instance.popsync(newfaultz(source));但我仍然有问题,因为它期待一个布尔。我是如何做到的?我的代码只是为了演示,你应该根据你的情况修改它。你能给我一个关于如何传递的代码片段吗?我觉得很困惑。我认为这是唯一能解决这个问题的方法。solvedRg.Plugins.Popup和本机导航类似。'public async void CancelEvent(){PopupNavigation.Instance.popsync(new Faultz(source));}'这是我导航的代码。法鲁兹是我在另一页上的解释者,该页采用ImageSouce source参数
this.Navigation.xxxContentPage(new xxxContentPage(source));
var source = ImageSource.FromStream(() =>
{
var stream = _mediaFile.GetStream();
return stream;
});
MessagingCenter.Send<Object, ImageSource>(this,"finish",source);
public Faultz()
{
InitializeComponent();
// ...
MessagingCenter.Subscribe<Object, ImageSource>(this, "finish", (arg, source) =>
{
capturedImage.Source = source;
});
}