繁体   English   中英

Xamarin Forms:如何将媒体文件从内容页面(弹出)传递到另一个内容页面

[英]Xamarin Forms: How Can i Pass Media File From a content page (popup) to another content page

请我使用 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;

        }
    }

上面的代码显示了我从中获取数据的_mediaFile 我如何将这个 _mediaFile 中的值传递给另一个内容页面,以便我可以在下一页中显示图像?

另一个页面有一个需要数据的 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" 需要保存来自弹出页面的 _mediafile 的值

您可以将Stream作为参数传递到下一页。

在方法 ChoosePhotoEvent 中

var source = ImageSource.FromStream(() =>
    {
        var stream = _mediaFile.GetStream();
        return stream;
    }); 

在另一个内容页面中

用参数定义一个新的构造函数

public xxxContentPage(ImageSource source)
{
   InitializeComponent();
   
    capturedImage.Source = source;
}

当你想弹出页面时

 this.Navigation.xxxContentPage(new xxxContentPage(source));

更新

在您的情况下,您可以使用 MessagingCenter 将数据传递到最后一页。这样您就不需要设置导航。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM