0

我正在尝试在 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 好像没有这个效果。我已经尝试UseLayoutRounding="True"在窗口、视图框、画布、矩形上进行设置——我什至尝试将它们同时放在所有这些上。对接缝没有影响。

我错过了什么(或误解)?如何使布局舍入以与 Viewbox 一起使用?

4

1 回答 1

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>
于 2009-12-07T01:52:18.223 回答