这是情景:
我有一个列表可以包含任何大小的图像(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),因为我想使用FFImageLoading库来显示占位符。
有人能告诉我如何操作图像以使它们的大小相同吗?
答案 0 :(得分:4)
我认为你应该能够使用这些额外的属性来做到这一点:
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
整个图像将会显示,但可以是letterboxed(顶部和底部有一个条形图),或者你可以使用AspectFill
来填充整个300x300的宽度和高度,但它可能是你丢失了部分图像,因为它们不适合。
正如评论中指出的那样;您可能希望将HorizontalOptions
设置为与FillAndExpand
不同的内容。因为这意味着它将扩展到可用的空间。而是将其设置为Start
。