为什么UseLayoutRounding似乎不能与Viewbox一起使用?

时间:2009-12-07 01:25:51

标签: wpf layout wpf-4.0 viewbox

我正在尝试在WPF 4中编写基于磁贴的游戏。我希望游戏板可以缩放以适应窗口,所以我正在使用Viewbox;但我希望每个瓷砖都在一个漂亮,清晰的像素边界上。我可能错了,但我的理解是这就是新的UseLayoutRounding属性应该是什么 - 但它没有按照我期望的方式工作。

这是一个展示问题的窗口:

<Window x:Class="Tyler.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Width="600" Height="400" Background="Black">
    <Viewbox>
        <Canvas Width="1000" Height="1000">
            <Rectangle Canvas.Left="100" Canvas.Top="100"
                       Width="100" Height="100" Fill="Gray"/>
            <Rectangle Canvas.Left="200" Canvas.Top="100"
                       Width="100" Height="100" Fill="Gray"/>
        </Canvas>
    </Viewbox>
</Window>

两个矩形相邻,但由于子像素坐标(由Viewbox的缩放产生),我最终在它们之间形成了一条较暗的灰色接缝。这就是我想要摆脱的 - 我希望它们能够无缝地融合在一起。

但UseLayoutRounding似乎没有这种效果。我已经尝试在Window,Viewbox,Canvas,Rectangles上设置UseLayoutRounding="True" - 我甚至尝试过立即将它放在所有这些上。对接缝没有影响。

我错过了什么(或误解)?如何使用Viewbox进行布局舍入?

1 个答案:

答案 0 :(得分:3)

SnapsToDevicePixels=True就是你想要的

<Viewbox SnapsToDevicePixels="True" >
    <Canvas Width="1000" Height="1000">
        <Rectangle Canvas.Left="100" Canvas.Top="100"
                   Width="100" Height="100" Fill="Gray"/>
        <Rectangle Canvas.Left="200" Canvas.Top="100"
                   Width="100" Height="100" Fill="Gray"/>
    </Canvas>
</Viewbox>