创建一个 400 x 400 的画布。在其中放置一个 200 x 400 的蓝色矩形。放置另一个相同大小的蓝色矩形,Canvas.Left = 200。将其包裹在 Viewbox 中并缩放视图框。在某些分辨率下,您会发现矩形之间出现一个白色的柱子,尽管它们应该是齐平的。
我怎样才能避免这种情况?到目前为止,我发现的唯一方法是将右侧矩形左侧的画布设置为略小于 200,例如 199 - 但即使这样也会在某些比例下显示伪影。
创建一个 400 x 400 的画布。在其中放置一个 200 x 400 的蓝色矩形。放置另一个相同大小的蓝色矩形,Canvas.Left = 200。将其包裹在 Viewbox 中并缩放视图框。在某些分辨率下,您会发现矩形之间出现一个白色的柱子,尽管它们应该是齐平的。
我怎样才能避免这种情况?到目前为止,我发现的唯一方法是将右侧矩形左侧的画布设置为略小于 200,例如 199 - 但即使这样也会在某些比例下显示伪影。
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 的变换来解决——相反,必须将像素捕捉应用于视图框。