У меня есть холст, и я рисую несколько линий:
for (int i = 1; i >= 100; i++)
{
// Line
LineGeometry line = new LineGeometry();
line.StartPoint = new Point(i * 100, 0);
line.EndPoint = new Point(i * 100, 100 * 100);
// Path
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
// Add to canvas
myPath.Data = line;
canvas1.Children.Add(myPath);
}
Ну, ничего особенного, но это создает проблемы - линии рисуются по-разному! Холст находится внутри средства просмотра прокрутки, на следующем рисунке показаны различные положения холста, однако линии должны выглядеть одинаково? Черт, как это возможно? Приведенный выше код является единственным кодом, который я написал вручную, и это единственный контент на холсте. Кто-нибудь знает, почему это происходит и как это предотвратить? Большое спасибо!
Снимок экрана: http://www.imagebanana.com/view/c01nrd6i/lines.png
Обновление
Таким образом, решение maurizios работает нормально, но только если вы используете LineGeometry для позиционирования линии, я все еще получаю размытые линии, когда использую холст для позиционирования линии.
Кто-нибудь может помочь мне с этим? Большое спасибо!
Пример скриншота и код для него:
Снимок экрана: http://www.imagebanana.com/view/lu7z3mcv/canvasposprob.png
Код:
// LINE POSITIONED BY CANVAS -> LINE GETS BLURRY
// Line
LineGeometry line = new LineGeometry();
line.StartPoint = new Point(0, 0);
line.EndPoint = new Point(0, 100);
// Path
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 5;
myPath.SnapsToDevicePixels = true;
line.Freeze();
// Add to canvas
myPath.Data = line;
Canvas.SetLeft(myPath, 10); // LINE POSITIONED BY CANVAS: x=10
Canvas.SetTop(myPath, 0); // LINE POSITIONED BY CANVAS
canvas1.SnapsToDevicePixels = true; // doesnt help
canvas1.Children.Add(myPath);
// LINE POSITIONED BY LINE GEOMETRY
// Line
LineGeometry line2 = new LineGeometry();
line2.StartPoint = new Point(20, 0); //LINE POSITIONED BY LINE GEOMETRY: x=20
line2.EndPoint = new Point(20, 100);
// Path
Path myPath2 = new Path();
myPath2.Stroke = Brushes.Blue;
myPath2.StrokeThickness = 5;
myPath2.SnapsToDevicePixels = true;
line2.Freeze();
// Add to canvas
myPath2.Data = line2;
// Don't use the canvas for positioning
//Canvas.SetTop(myPath, 10); //NEW
//Canvas.SetLeft(myPath, 10); //NEW
canvas1.Children.Add(myPath2);