我使用Line类在WPF中的画布上绘制,即使我设置了StrokeThickness = 1
,线条也显示为2像素宽-几乎就像最小厚度是2一样。我如何绘制真正的1像素厚的线条?
Line myLine = new Line();
myLine.Stroke = System.Windows.Media.Brushes.Black;
myLine.X1 = 100;
myLine.X2 = 140; // 150 too far
myLine.Y1 = 200;
myLine.Y2 = 200;
myLine.StrokeThickness = 1;
graphSurface.Children.Add(myLine);
字符串
5条答案
按热度按时间xpcnnkqh1#
两件事:
字符串
uubf1zoe2#
尝试添加以下内容:
字符串
这将阻止WPF渲染“半像素”来消除线条的锯齿。
vyu0f0g13#
除了已经建议的之外,您的屏幕分辨率也可能超过96 DPI。无论您给WPF提供什么测量值,默认情况下WPF将始终假设96像素对应于1英寸。
结果是,在192 DPI(96 * 2)的屏幕上,绘制厚度为1的线条将绘制厚度为2像素的线条。
如果是这种情况,则必须明确指定单位。
wwodge7n4#
我发现this answer是不够的,它不适用于画布上的垂直线:有时显示为2像素宽。
我在Canvass的一个子类中使用了以下方法:
字符串
这是不可靠的:线有时显示为一个像素宽,有时为两个像素宽。
将
x
的值限制为一个整数使其可靠--即可靠地为两个像素宽!型
加上
0.5
,它就变成了一个像素:型
r8xiu3jd5#
如果您希望一条线从其画布的边缘开始(例如Y1 = 0),那么简单地在每条线上设置SnapsToDevicePixels并不是一个好的解决方案,因为线将捕捉到设备像素,但画布可能不会,从而导致画布的半像素(例如画布背景色)在线外部可见。
相反,您可以简单地在画布上设置SnapsToDevicePixels=“True”。这还有一个优点,即 * 您不再需要在每条线上设置SnapsToDevicePixels *。