从父布局中删除和添加 xamarin 表单图像时出现问题

Posted

技术标签:

【中文标题】从父布局中删除和添加 xamarin 表单图像时出现问题【英文标题】:Problem with xamarin forms image when removing and adding it from parent layout 【发布时间】:2021-12-08 11:29:16 【问题描述】:

说明 我创建了简单的 Xamarin.Forms 示例。在其中,我添加了一个图像并通过 ImageSource.FromSource() 方法将图像作为流加载,然后将其删除并将其添加到布局中。

Xamarin.Forms UWP图片将消失。Xamarin.Forms Android无法访问关闭流异常抛出。Xamarin.Forms iOS 尚未检查。

请在下面找到代码sn-p

XAML:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ImageException.MainPage">

    <ContentPage.Content>
        <Grid x:Name="MainGrid">
            <Image x:Name="image" />
            <Button Text="Click_Me"
                    Clicked="Button_Clicked"
                    VerticalOptions="End" />
        </Grid>
    </ContentPage.Content>
</ContentPage>

C#:

namespace ImageException

    public partial class MainPage : ContentPage
    
        public MainPage()
        
            InitializeComponent();

            var assembly = typeof(MainPage).Assembly;
            string path = "ImageException";

            var stream = assembly.GetManifestResourceStream($"path.Image.Image.png");
            image.Source = ImageSource.FromStream(() => stream);
        

        private void Button_Clicked(object sender, EventArgs e)
        
            MainGrid.Children.Remove(image);
            MainGrid.Children.Add(image);
        
    

请从以下链接https://github.com/VigneshRameshh/XamarinFormsImageException获取完整示例

谁能建议在从布局中删除和添加图像后如何保留图像?

提前致谢, 维涅什·拉梅什。

【问题讨论】:

【参考方案1】:

我检查了您的代码并且可以重现您的异常。

如果你想解决这个问题,你可以使用下面的代码。

   Stream stream;
    Assembly assembly;
    string path;
    public Page18()
    
        InitializeComponent();
        assembly = typeof(MainPage).Assembly;
        path = "App14";

        stream = assembly.GetManifestResourceStream($"path.Image.beach.jpg");
        image.Source = ImageSource.FromStream(() => stream);
    

    private void Button_Clicked(object sender, EventArgs e)
    
        stream = assembly.GetManifestResourceStream($"path.Image.beach.jpg");
        MainGrid.Children.Remove(image);

        MainGrid.Children.Add(image);

    

【讨论】:

感谢您的建议。我可以知道,有没有办法在不使其成为全局变量的情况下实现这一点? YES,但您无法从流中加载图像。从每个平台的资源文件夹中设置图像。有关更多详细信息,请查看以下链接。 docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/…

以上是关于从父布局中删除和添加 xamarin 表单图像时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin 表单中使用带有图像和文本的按钮

如何在 Xamarin 表单 macos 的条目(用于聊天)中添加自定义图像?

将图像添加到树视图控件 xamarin 表单中

Xamarin 表单:GestureRecognizers 对点击响应不佳,需要多次点击才能打开页面

图像不显示XAML android

是否可以在 Xamarin 表单中使用图像集