WPF中如何在1像素厚的画布上画线我在WPF中使用Line类在画布上画线,即使我设置了StrokeThickness=1并且线条显示为2个像素宽-它几乎就像最小厚度为2。我如何绘制一条真正为1个像素粗的线条?行myLine=newLine();myLine.Stroke=System.Windows.Media.Brushes.Black;我的线.X1=100;我的线.X2=140;//150太远了myLine.Y1=200;;myLine.StrokeThickness=1;graphSurface.Children.Add(myLine);两件事:myLine.SnapsToDevicePixels=true;myLine.SetValue(RenderOptions.EdgeModeProperty,EdgeMode.Aliased);除了建议,您的屏幕分辨率可能超过96DPI。无论您给WPF什么测量值,默认情况下WPF始终假定96像素对应于1英寸。结果是在192DPI(96*2)的屏幕上,画一条粗细为1的线,就会画出一条粗细为2像素的线。如果是这种情况,则必须明确指定单位。尝试添加:myLine.SnapsToDevicePixels=true;这将阻止WPF对您的行呈现“半像素”。我发现这个答案不够充分,它不适用于Canvass上的垂直线:有时它看起来有2个像素宽。为了解决这个问题,我发现我需要限制线条的X位置,我在Canvass的子类中使用了以下方法:LinenewLine(doublex1,doublex2,doubley1,doubley2,Brushbrush){Lineline=new线line.X1=x1;线.X2=x2;线.Y1=y1;线.Y2=y2;line.StrokeThickness=1;line.Stroke=画笔;//https://stackoverflow.com/questions/2879033/how-do-you-draw-a-line-on-a-canvas-in-wpf-that-is-1-pixel-thickline.SnapsToDevicePixels=true;line.SetValue(RenderOptions.EdgeModeProperty,EdgeMode.Aliased);base.Children.Add(线);返回线;}internalvoidShowVertical(doublex){Lineline=newLine(0,0,50,150,Brushes.Red);SetLeft(线,x);这是不可靠的:线条有时看起来是一个像素宽,有时是两个像素宽。将x值限制为整数使其可靠——即可靠地为两个像素宽!x=(整数)x;加0.5使其可靠地成为一个像素:以上是C#学习教程:Howtodrawalineona1pixelthickcanvasinWPF所有内容分享,如果对大家有用需要了解更多C#学习教程,希望大家多多关注——x=(int)x+0.5;如需转载请注明出处:
