我的 C#/XAML Metro 应用程序中有一个页面,它使用EntranceThemeTransition
. 在这个页面中,我有一些平铺Image
的图形: 彼此紧密贴合以构建更大的图像。我确保将尺寸设为 5 的倍数,因此即使在不同的 DPI 下它们也能很好地适应。
由于默认值为,我希望 的每一步都UseLayoutRounding
四舍五入到最近的像素。然而,这并没有发生,正如这个屏幕截图所示(注意两条细的绿色垂直线穿过应该是一个实心块):true
EntranceThemeAnimation
这应该是一个无缝块,由 9 个图块(3 宽 x 3 高,每个图块 80x80 像素)组成。在垂直方向上,它们完美地结合在一起;但是当页面动画时,因为 X 方向正在动画并且并不总是 1 像素的倍数,所以我最终会在图块之间出现接缝(因为每个图像的 X 都是分数,所以每个图像都有两个图像在已经存在的顶部绘制具有 50% 不透明度的中间像素,从而导致总共 75% 的不透明度而不是 100%)。这是UseLayoutRounding
应该防止的那种问题,但它根本没有帮助。
动画完成后,一切都会安定下来,一切都会完美排列。但是在动画期间,尤其是在动画停止之前,接缝非常明显。
我尝试UseLayoutRounding="true"
在育儿层次结构的各个点显式设置,但没有帮助。
这是我的 XAML 的简化形式,它重现了该问题:
<Page x:Class="App1.Page1"
UseLayoutRounding="True"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Background="Green" UseLayoutRounding="True">
<Grid.ChildrenTransitions>
<TransitionCollection>
<EntranceThemeTransition/>
</TransitionCollection>
</Grid.ChildrenTransitions>
<Canvas UseLayoutRounding="True">
<Image Canvas.Left="80" Canvas.Top="80" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="160" Canvas.Top="80" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="240" Canvas.Top="80" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="80" Canvas.Top="160" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="160" Canvas.Top="160" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="240" Canvas.Top="160" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="80" Canvas.Top="240" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="160" Canvas.Top="240" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
<Image Canvas.Left="240" Canvas.Top="240" Source="/Assets/DirtSquare.png" Width="80" Height="80" UseLayoutRounding="True"/>
</Canvas>
</Grid>
</Page>
我该怎么做才能使布局实际上将所有位置四舍五入到最近的像素,即使EntranceThemeTransition
正在为页面设置动画?