我使用WPF網格對齊對象,跑進一個相當突出的問題,關於列像素排列。我試圖刪除儘可能多的變量可能的,並設法顯示問題在此代碼: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具有內部一致的舍入,所以兩列都捕捉到相同的像素。 但是,我遇到了一個非常相似的問題,我無法找到解決方案。
出於某種原因,使用幾何級的時候,我得到了相同的排序像素對齊問題,我這段時間我沒有找到任何形式的變通。就好像這些像素是圓形的,但現在幾何圖形被折斷一個像素,留下一個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>
謝謝!它工作得很好 - 用工作代碼編輯我的問題。似乎奇怪的是,圖紙不關心它們的容器的SnapsToDevicePixels,雖然,或至少DrawingGroup沒有自己的財產SnapsToDevicePixels。我最終做了那個屬性手動做的事情...... – 2009-10-20 08:59:12