在Silverlight中缩放后形状之间的间隙

时间:2011-03-25 15:34:21

标签: silverlight canvas viewbox scaletransform

创建400 x 400画布。放入一个200 x 400的蓝色矩形。使用Canvas.Left = 200放置另一个相同大小的蓝色矩形。将其包装在Viewbox中并缩放视图框。在某些分辨率下,您会发现矩形之间会出现一个白色列,尽管它们应该是齐平的。

我该如何避免这种情况?到目前为止,我发现的唯一方法是将右边矩形的画布设置为略小于200,如199 - 但即便如此,也会显示某些尺度的伪影。

1 个答案:

答案 0 :(得分:0)

ViewBox中的ScaleTransform给你带来麻烦。文本的像素捕捉将在Silverlight 5中提供,但我不确定所有UI元素。

使用Dave Reyea的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>

他还展示了如何将其实现为dependency property。如果您可以修改Viewbox以纠正问题会很好,但在我看来,这不能简单地通过修改Viewbox的转换来解决 - 相反,像素捕捉必须应用于每个后代元素。视框。