我的C#/ XAML Metro应用中有一个页面使用EntranceThemeTransition
进行动画制作。在这个页面中,我有一些平铺图形:Image
s,它们相互贴合以构建更大的图像。我确保将尺寸的倍数设为5,因此即使在不同的DPI下它们也能很好地适应。
由于UseLayoutRounding
的默认值为true
,我希望EntranceThemeAnimation
的每一步都舍入到最近的像素。然而,这并没有发生,正如这个截图所示(注意两条细绿色垂直线通过什么应该是一个固体块):
这应该是一个无缝块,由9个瓷砖组成(3个宽x 3高,每个瓷砖80x80像素)。它们垂直地完美地结合在一起;虽然页面是动画的,因为X方向是动画的并且不总是1个像素的倍数,我最终会在切片之间产生接缝(因为每个图像的X都是小数,所以你和#39;有两个图像,每个图像绘制中间像素,在已经存在的情况下具有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
为页面设置动画时,我还能做些什么才能让布局实际将所有位置四舍五入到最近的像素?