Разрыв между фигурами после масштабирования в Silverlight - PullRequest
2 голосов
/ 25 марта 2011

Создание холста 400 х 400.Поместите синий прямоугольник размером 200 x 400.Поместите еще один синий прямоугольник того же размера с Canvas.Left = 200. Оберните его в окне просмотра и масштабируйте поле просмотра.При определенных разрешениях вы увидите белую колонну между прямоугольниками, несмотря на то, что они должны быть заподлицо.

Как мне избежать этого?Единственный способ, который я нашел до сих пор, это установить холст слева от правого прямоугольника чуть меньше 200, например 199, но даже при этом отображаются артефакты в определенных масштабах.

1 Ответ

0 голосов
/ 05 апреля 2011

ScaleTransform в ViewBox доставляет вам неприятности. Пиксельная привязка к тексту будет доставлена ​​в Silverlight 5, но я не уверен насчет всех элементов пользовательского интерфейса.

Использование Dave Reyea's Pixel Snapper может помочь вам обойти это:

<UserControl x:Class="SO_Viewbox.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400"
              xmlns:local="clr-namespace:SO_Viewbox">

    <Viewbox>
        <Canvas Width="400" Height="400" Background="Yellow">
            <local:Snapper Snap="TopLeft">
                <Rectangle Width="200" Height="400" Fill="Blue" />
            </local:Snapper>
            <local:Snapper Canvas.Left="200" Snap="TopLeft">
                <Rectangle  Width="200" Height="400" Fill="Blue" />
            </local:Snapper>
        </Canvas>
    </Viewbox>
</UserControl>

Он также показывает, как реализовать его как свойство зависимостей . Было бы неплохо, если бы вы могли изменить Viewbox, чтобы исправить проблему, но мне кажется, что это не может быть просто решено путем изменения преобразования Viewbox - вместо этого необходимо применить привязку к пикселям к каждому из элементов-потомков Viewbox.

...