Я обнаружил, что этого ответа недостаточно, что он не работает для вертикальных линий на Canvass: который иногда отображается как 2 пикселя в ширину. Чтобы исправить это, мне нужно ограничить положение X линии
Я использовал следующий метод в подклассе Canvass:
Line newLine(double x1, double x2, double y1, double y2, Brush brush)
{
Line line = new Line();
line.X1 = x1;
line.X2 = x2;
line.Y1 = y1;
line.Y2 = y2;
line.StrokeThickness = 1;
line.Stroke = brush;
// /2119668/kak-narisovat-liniy-na-holste-v-wpf-tolschinoi-1-piksel
line.SnapsToDevicePixels = true;
line.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);
base.Children.Add(line);
return line;
}
internal void ShowVertical(double x)
{
Line line = newLine(0, 0, 50, 150, Brushes.Red);
SetLeft(line, x);
}
Это было ненадежно: строка иногда отображалась шириной в один пиксель, а иногда и двумя пикселями.
Ограничение значения x
целым числом сделало его надежным - т.е. надежно шириной в два пикселя!
x = (int)x;
Добавление 0.5
к этому сделало его надежно одним пикселем:
x = (int)x + 0.5;