Я пытаюсь написать игру на основе плитки в 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>
Два прямоугольника являются смежными, но из-за субпиксельных координат (в результате масштабирования окна просмотра) я получаю более темный серый шов между ними. Вот от чего я пытаюсь избавиться — я хочу, чтобы они плавно смешивались друг с другом.
Но UseLayoutRounding, похоже, не имеет такого эффекта. Я пытался установить UseLayoutRounding="True"
для окна, окна просмотра, холста, прямоугольников — я даже пытался установить его для всех сразу. На шов не влияет.
Что я упускаю (или неправильно понимаю)? Как я могу заставить округление макета работать с Viewbox?