我正在使用WPF网格来对齐对象,并且遇到了关于列的像素对齐的相当明显的问题。我尝试删除尽可能多的变量,并设法在此代码中显示问题:
<Window x:Class="Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100.5" />
<ColumnDefinition Width="199.5" />
</Grid.ColumnDefinitions>
<Border Background="Red">
<Grid.Column>1</Grid.Column>
</Border>
<Border Background="Red">
</Border>
</Grid>
</Window>
如果运行该示例,很容易看出两列之间的边界存在问题。我认为,这是因为WPF简单地将一列与背景混合,另一列与结果混合,即使概念上两列都在同一个Z中,因此像素应该是它们的权重和背景
我知道这是一个有问题的问题,当然我并不是故意创建具有部分像素大小的列,但使用星号时我可以很容易地观察到相同的效果(我经常使用它)。
使用SnapsToDevicePixels属性(<Grid SnapsToDevicePixels="True">
而不是<Grid>
)可以解决此问题。这是有效的,因为WPF具有内部一致的舍入,因此两列都捕捉到相同的像素。
但是,我遇到了一个非常相似的问题,我无法找到解决方案。
出于某种原因,当使用Geometry类时,我得到了相同类型的像素对齐问题,而这次我没有找到任何类型的解决方法。好像像素是圆形的,但是现在几何图形被关闭一个像素,留下一个1像素宽的孔。
示例代码:
<Window x:Class="Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid SnapsToDevicePixels="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100.5" />
<ColumnDefinition Width="199.5" />
</Grid.ColumnDefinitions>
<Border Background="Red">
<Grid.Column>1</Grid.Column>
</Border>
<Border>
<Border.Background>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing Brush="Red">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0,1,1"></RectangleGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Border.Background>
</Border>
</Grid>
</Window>
知道如何让我的像素正确对齐吗?
修改
根据答案添加GuidelineSet后立即正常工作。工作图代码是:
<DrawingGroup>
<DrawingGroup.GuidelineSet>
<GuidelineSet GuidelinesX="0,1" GuidelinesY="0,1"></GuidelineSet>
</DrawingGroup.GuidelineSet>
<GeometryDrawing Brush="Red">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0,1,1"></RectangleGeometry>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
答案 0 :(得分:2)
我相信你必须use a GuidelineSet in the case of a Drawing。关于如何在SDK中应用可用的GuidelineSets here,有一个很好的部分。