【发布时间】:2014-05-16 18:44:12
【问题描述】:
我发现我在列表中加载的图像有一个奇怪的行为。以下是产生此问题的 itemTemplate 的简化 sn-p:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<Image x:Name="Art" Grid.Row="1" Grid.Column="1" Source="{Binding Url}" Stretch="UniformToFill" />
</Grid>
图像加载的文件是大小为 360w,240h 的 .png。当我第一次打开加载上述 xaml 的页面时,列表为每个图像呈现 180w、180h 的空间,网格尺寸给出了可用的完整尺寸:180 宽度和自动高度。然后,一旦加载了图像,图像区域就会缩小到网格的宽度限制(180),并且它的高度会按比例缩放(120)。所以效果是列表项以 180 x 180 的正方形绘制,然后在图像加载后缩小到 180 x 120。
我希望在下载图像源之前,图像元素的尺寸为 0,0。我希望在加载图像之前,每个项目的内容都不会占据任何高度;该区域不应以 180 小时开始。
这个问题是设计的吗?是否有任何已知的解决方法来处理它?我的真实代码在本地加载的同一网格位置中有一个默认图像,而最终图像的下载尚未完成。它的尺寸与加载的图像源相同,因此在图像加载时占位符图像的顶部和底部之间存在间隙,然后网格空间缩小到它应该一直存在的位置。太恶心了。
【问题讨论】:
-
我知道这很糟糕,但您是否尝试过颠倒行/列定义的顺序?那里有奇怪的异常,所以值得一问......
-
我尝试过您的建议,但不幸的是,更改顺序并没有改变任何东西。如果有的话就有点吓人了。
-
我做了一个小实验,得到了同样的结果!感谢您的尝试!我唯一的其他建议是将图像放入第 1 行第 1 列的容器中。这可能是一场疯狂的追逐,但你永远不会知道。
-
感谢您复制 Gayot 这个实验。听起来这不是一个有明显修复的众所周知的问题,所以我将坚持明确设置网格高度以强制正确行为的低条解决方案。
-
一切都没有丢失。有一个叫做“Clemens”的用户对这些东西了如指掌。希望他能对您的问题发表意见,并且您会准备就绪。