2

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

我怎样才能避免这种情况?到目前为止,我发现的唯一方法是将右侧矩形左侧的画布设置为略小于 200,例如 199 - 但即使这样也会在某些比例下显示伪影。

4

1 回答 1

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>

他还展示了如何将其实现为依赖属性。如果您可以修改 Viewbox 以纠正问题,那就太好了,但在我看来,这不能简单地通过修改 Viewbox 的变换来解决——相反,必须将像素捕捉应用于视图框。

于 2011-04-05T13:34:46.037 回答