Я пытаюсь написать игру на основе тайлов в 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?