创建400 x 400画布。放入一个200 x 400的蓝色矩形。使用Canvas.Left = 200放置另一个相同大小的蓝色矩形。将其包装在Viewbox中并缩放视图框。在某些分辨率下,您会发现矩形之间会出现一个白色列,尽管它们应该是齐平的。
我该如何避免这种情况?到目前为止,我发现的唯一方法是将右边矩形的画布设置为略小于200,如199 - 但即便如此,也会显示某些尺度的伪影。
答案 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的转换来解决 - 相反,像素捕捉必须应用于每个后代元素。视框。