如何使转换荣誉UseLayoutRounding?

时间:2012-08-13 12:53:55

标签: winrt-xaml tessellation

我的C#/ XAML Metro应用中有一个页面使用EntranceThemeTransition进行动画制作。在这个页面中,我有一些平铺图形:Image s,它们相互贴合以构建更大的图像。我确保将尺寸的倍数设为5,因此即使在不同的DPI下它们也能很好地适应。

由于UseLayoutRounding的默认值为true,我希望EntranceThemeAnimation的每一步都舍入到最近的像素。然而,这并没有发生,正如这个截图所示(注意两条细绿色垂直线通过什么应该是一个固体块):

enter image description here

这应该是一个无缝块,由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为页面设置动画时,我还能做些什么才能让布局实际将所有位置四舍五入到最近的像素?

0 个答案:

没有答案