如何在我的 Xamarin.Forms 应用程序的 UWP 版本中显示图像

Posted

技术标签:

【中文标题】如何在我的 Xamarin.Forms 应用程序的 UWP 版本中显示图像【英文标题】:How do I make images show up in UWP version of my Xamarin.Forms application 【发布时间】:2021-01-28 06:39:07 【问题描述】:

我有一个像这样的简单 Xaml:

...
    <ContentPage.Content>
        <Grid Padding="0,40,0,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <Image  Grid.Row ="0" Source="iMobile"
                        HorizontalOptions="CenterAndExpand"
                        WidthRequest="260" HeightRequest="129"/>
        </Grid>
    </ContentPage.Content>

图像iMobile 显示在androidios 上。对于Android,我在单独的可绘制文件夹中有不同尺寸的图像。对于ios,我在 Assets 目录中有不同大小的图像。

我尝试为 UWP 做同样的事情,但似乎没有任何效果。以下是我尝试做的一些事情:

我已将图像添加到 UWP 项目的根目录,但这不起作用。

我将图像添加到 Assets 目录,但没有成功。

我尝试将.scale-100.scale-200.scale-400 添加到图像文件的名称中(分别尝试了它们)但没有奏效。

我也尝试将图像放在名为 scale-100 的目录中,但这也不起作用。

任何想法可能导致我的问题以及如何解决这个问题?如此琐碎的事情占用了我这么多时间,真是令人沮丧。

更新: 我尝试使用 URL 作为源而不是 iMobile,这也不适用于 UWP,但它适用于 Android,知道为什么会这样吗?

【问题讨论】:

您是否将构建操作设置为“内容”? docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/… 是的构建操作设置为内容 @Jason 似乎图像根本不起作用,我尝试使用 URL 作为源而不是 iMobile,这不会出现在 UWP 但它确实可以工作或 Android,任何知道为什么会这样吗? 我对 UWP 知之甚少。我建议您从 Xamarin 下载其中一个示例并检查它们的图像是如何工作的 【参考方案1】:

如何在我的 Xamarin.Forms 应用程序的 UWP 版本中显示图像

请参考Images in Xamarin.Forms官方文档。 Xamarin 表单支持Native resolutions.

UWP 图像文件名可以在文件扩展名前加上 .scale-xxx 后缀,其中 xxx 是应用于资产的缩放百分比,例如myimage.scale-200.png。然后可以在没有比例修饰符的代码或 XAML 中引用图像,例如只是 myimage.png。平台会根据显示器当前的 DPI 选择最接近的合适资产比例。

如果您将图像文件放在 UWP Assets 文件夹中,您可以使用以下 xaml,请注意默认的空白 xamarin 应用程序 iamge 文件的颜色为白色,我们需要设置黑色背景以突出显示它们。

<Grid BackgroundColor="Black">
    <Image>
        <Image.Source>
            <OnPlatform x:TypeArguments="FileImageSource">
                <On Platform="UWP" Value="Assets/LargeTile.png" />
                <On Platform="iOS" Value="LargeTile.png" />
                <On Platform="Android" Value="LargeTile.png" />
            </OnPlatform>
        </Image.Source>
    </Image>
</Grid>

【讨论】:

我已经阅读了您提供的链接中的文档,并且我已经完成了那里所述的步骤,我将图像放在我的 UWP 项目的根目录中并使用了 iMobile.png 但它仍然没有不行。更令人困惑的是,我尝试使用谷歌图像 URL 作为图像源,但它仍然无法正常工作。但是,当我尝试在 github.com/xamarin/xamarin-forms-samples/tree/master/Todo 的示例项目中使用此链接作为图像源(代替 check.png)时,它工作正常,关于为什么它可能不适合我的任何想法? 您能分享您的 imobile png 文件进行测试吗? 所以我想通了,结果我所要做的就是将 .png 添加到 iMobile 以使其适用于 UWP,但是使用 URL 作为图像源仍然没有工作,我不知道为什么会这样,但既然这工作,这对我来说不是一个问题。 你能分享你的图片 uri 进行测试吗? freepngimg.com/thumb/google/…

以上是关于如何在我的 Xamarin.Forms 应用程序的 UWP 版本中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏处理Xamarin.Forms

如何在 Xamarin.Forms 中强制使用灯光模式?

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

如何在 xamarin.forms 中获取状态栏高度?

在 Xamarin Forms 中存储密钥

(Xamarin Forms)从“主页”导航到任何页面时如何显示工具栏?