如何在WinRT中使用没有边缘别名伪像的矩形填充Canvas

时间:2014-01-14 05:23:57

标签: wpf windows-runtime wpf-controls winrt-xaml

我正在编写简单的益智游戏,其中拼图是由正方形组成的棋盘。每X和每Y的平方数是固定的。我希望拼图可以统一缩放到任意大小以适应用户的屏幕,填充游戏控件留下的所有空间。

以下是显示问题的示例XAML。 Viewbox用于执行自动缩放。     

  <Viewbox>
    <Canvas Width="320" Height="240" Background="Black">
      <Border
          Width="20" Height="20"
          Background="Red"
          >
        <Border.RenderTransform>
          <TranslateTransform X="0" Y="0" />
        </Border.RenderTransform>
      </Border>
      <Border
          Width="20" Height="20"
          Background="Red"
          >
        <Border.RenderTransform>
          <TranslateTransform X="20" Y="0" />
        </Border.RenderTransform>
      </Border>
      <Border
          Width="20" Height="20"
          Background="Red"
          >
        <Border.RenderTransform>
          <TranslateTransform X="40" Y="0" />
        </Border.RenderTransform>
      </Border>
    </Canvas>
  </Viewbox>
</UserControl>

问题出现在实际应用程序中,但也可以在Visual Studio XAML设计器中观察到。如果打开此文件并将缩放比例设置为111%,则矩形之间将出现1px宽度的垂直黑色间隙。我认为这是因为边缘出现锯齿现象。

aliasing screenshot

到目前为止,我尝试在Canvas上设置CacheMode =“BitmapCache”和/或UseLayoutRounding =“False”。它没有帮助。

如何摆脱这种渲染工件?

P.S。对不起,SO的解析器削减了开始标记。这是指向PasteBin的链接:http://pastebin.com/qtre6XSg

1 个答案:

答案 0 :(得分:1)

如果添加ScaleTransform =“1.01”,则边缘将重叠。对不起这个答案,但我认为,鉴于它的工作原理,这可能是您最好的解决方案。