3
下面的代碼在畫布上繪製兩條垂直線。這些線條在屏幕上顯示爲不同的厚度,儘管它們在代碼中是相同的。我正在尋找一種方法讓它們看起來像畫布邊框一樣鋒利。設置Path.SnapsToDevicePixels沒有任何作用。代碼是一個人爲的例子,一般來說,繪製這些線條的畫布可以嵌套在視覺樹的更深處。別名問題
感謝您的幫助 康斯坦丁
<Window x:Class="wpfapp.MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Border BorderBrush="Black"
BorderThickness="1"
Margin="10">
<Canvas x:Name="Canvas"
SizeChanged="OnCanvasSizeChanged" />
</Border>
</Grid>
</Window>
using System.Windows;
using System.Windows.Media;
using System.Windows.Shapes;
namespace wpfapp
{
public partial class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
}
private void OnCanvasSizeChanged(object sender, SizeChangedEventArgs e)
{
StreamGeometry g = new StreamGeometry();
double h = this.Canvas.ActualHeight;
using (StreamGeometryContext c = g.Open())
{
c.BeginFigure(new Point(7, 0), false, false);
c.LineTo(new Point(7, h), true, false);
c.BeginFigure(new Point(14, 0), false, false);
c.LineTo(new Point(14, h), true, false);
}
g.Freeze();
Path p = new Path();
p.Data = g;
p.SnapsToDevicePixels = true;
p.Stroke = new SolidColorBrush(Colors.Black);
p.StrokeThickness = 1;
this.Canvas.Children.Clear();
this.Canvas.Children.Add(p);
}
}
}
只是一種預感,但儘量在包含畫布樹中的每個元素上設置SnapsToDevicePixels。如果將矢量轉換爲渲染流水線上的未對齊座標,則將單個元素捕捉到設備像素無濟於事。 – 2010-10-27 15:08:17