Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin.Forms中强制将ViewCell的图像调整为特定大小?_C#_Image_Xaml_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何在Xamarin.Forms中强制将ViewCell的图像调整为特定大小?

C# 如何在Xamarin.Forms中强制将ViewCell的图像调整为特定大小?,c#,image,xaml,xamarin,xamarin.forms,C#,Image,Xaml,Xamarin,Xamarin.forms,这是一个场景: 我有一个列表,可以包含任何大小的图像(400x400、1x1、5837x2472,你明白了)。图像需要调整大小,以便使用XAML(最好)使每个图像具有相同的分辨率 这就是它现在的样子: 正如你所看到的,第二张图片太宽了 我不是很聪明,当涉及到图像和调整/裁剪他们,所以我道歉,如果这是一个愚蠢的问题 当前代码: <DataTemplate x:Key="dummyTemplate"> <ViewCell>

这是一个场景:

我有一个列表,可以包含任何大小的图像(400x400、1x1、5837x2472,你明白了)。图像需要调整大小,以便使用XAML(最好)使每个图像具有相同的分辨率

这就是它现在的样子:

正如你所看到的,第二张图片太宽了

我不是很聪明,当涉及到图像和调整/裁剪他们,所以我道歉,如果这是一个愚蠢的问题

当前代码:

<DataTemplate x:Key="dummyTemplate">
            <ViewCell>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="60"/>
                    </Grid.ColumnDefinitions>

                    <ffimageloading:CachedImage
                        Grid.Column="0"
                        Grid.RowSpan="2"
                        HorizontalOptions="FillAndExpand"
                        Aspect="AspectFit"
                        Source="{Binding ImageSourceProperty}"
                        LoadingPlaceholder="placeholder_list.png"
                        ErrorPlaceholder="placeholder_list.png">
                    </ffimageloading:CachedImage>

                    <Label Text="{Binding TextProperty}" TextColor="#000000" Grid.Column="1" Grid.Row="0"/>
                    <Label Text="{Binding DetailProperty}" TextColor="#999999" Style="{StaticResource CaptionTextStyle}"  Grid.Column="1" Grid.Row="1"/>
                </Grid>             
            </ViewCell>
</DataTemplate>

我使用的是自定义ViewCell而不是ImageCell(尽管最终它看起来应该像ImageCell),因为我想使用库来显示占位符


有谁能告诉我如何操作这些图像,使它们大小相同吗?

我认为您应该能够使用这些额外的属性:

WidthRequest=“300”HeightRequest=“300”DownsampleToViewSize=“true”
,如下所示:

<ffimageloading:CachedImage
    Grid.Column="0"
    Grid.RowSpan="2"
    HorizontalOptions="FillAndExpand"
    Aspect="AspectFit"
    Source="{Binding ImageSourceProperty}"
    LoadingPlaceholder="placeholder_list.png"
    ErrorPlaceholder="placeholder_list.png"
    WidthRequest="300"
    HeightRequest="300"
    DownsampleToViewSize="true">
</ffimageloading:CachedImage>

这会将图像大小调整为300x300,并对其进行下采样,而不是对其进行缩放,这将极大地降低内存使用率

然后由您决定如何处理
Aspect=“AspectFit”
属性。使用
AspectFit
将显示整个图像,但可以用字母框(顶部和底部的一个条形)或使用
AspectFill
填充整个300x300的宽度和高度,但可能会丢失图像的某些部分,因为它们不适合


正如评论中指出的那样;您可能希望将
水平选项设置为不同于
填充扩展盘的选项。因为这意味着它将扩展到可用的空间。而是将其设置为
Start

我认为您应该能够使用这些额外属性来完成此操作:

WidthRequest=“300”HeightRequest=“300”DownsampleToViewSize=“true”
,如下所示:

<ffimageloading:CachedImage
    Grid.Column="0"
    Grid.RowSpan="2"
    HorizontalOptions="FillAndExpand"
    Aspect="AspectFit"
    Source="{Binding ImageSourceProperty}"
    LoadingPlaceholder="placeholder_list.png"
    ErrorPlaceholder="placeholder_list.png"
    WidthRequest="300"
    HeightRequest="300"
    DownsampleToViewSize="true">
</ffimageloading:CachedImage>

这会将图像大小调整为300x300,并对其进行下采样,而不是对其进行缩放,这将极大地降低内存使用率

然后由您决定如何处理
Aspect=“AspectFit”
属性。使用
AspectFit
将显示整个图像,但可以用字母框(顶部和底部的一个条形)或使用
AspectFill
填充整个300x300的宽度和高度,但可能会丢失图像的某些部分,因为它们不适合


正如评论中指出的那样;您可能希望将
水平选项设置为不同于
填充扩展盘的选项。因为这意味着它将扩展到可用的空间。而是将它设置为
开始

答案不错,我同意这一点。。。我刚刚打开VS来测试我头脑中的这种答案,但我想测试一下,但是看到这段代码,我同意这个答案,这是我去年在一个学校项目中使用的一种方法,这是一个最好的解决方案。向上投票:)谢谢你的回复!我只是试了一下,可惜什么都没变。我今晚/明天还要做更多的工作。我的产品负责人告诉我,如果图像太大(比如我示例中的第二个),我希望边缘应该被“切掉”,这样它就会是一个正方形。您的代码示例是否可以处理此问题?这可能是由于HorizontalOptions=“FillAndExpand”图像占用的空间比您通过“高度”和“宽度”属性定义的还要多。您可以尝试将其设置为“开始”,然后定义高度和宽度。是的,对于“高度和宽度”请求,您必须将水平和垂直选项从FillAndExpand(默认设置为)更改为“居中”、“开始”或“结束”。我同意这一点。。。我刚刚打开VS来测试我头脑中的这种答案,但我想测试一下,但是看到这段代码,我同意这个答案,这是我去年在一个学校项目中使用的一种方法,这是一个最好的解决方案。向上投票:)谢谢你的回复!我只是试了一下,可惜什么都没变。我今晚/明天还要做更多的工作。我的产品负责人告诉我,如果图像太大(比如我示例中的第二个),我希望边缘应该被“切掉”,这样它就会是一个正方形。您的代码示例是否可以处理此问题?这可能是由于HorizontalOptions=“FillAndExpand”图像占用的空间比您通过“高度”和“宽度”属性定义的还要多。您可以尝试将其设置为“开始”,然后定义高度和宽度。是的,对于“高度和宽度”请求,您必须将水平和垂直选项从FillAndExpand(默认设置为)更改为“居中”、“开始”或“结束”