C# Xamarin表单:如何将媒体文件从内容页(弹出窗口)传递到另一个内容页

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

请注意,我正在使用Rg.Plugins.Popup执行操作。我从中捕捉照片。照片存储在MediaFile对象中。我想将MediaFile的值传递到调用弹出窗口的主页面

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