WPF: Одна и та же линия нарисована по-другому? - PullRequest
0 голосов
/ 21 марта 2010

У меня есть холст, и я рисую несколько линий:

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);

1 Ответ

2 голосов
/ 21 марта 2010

Установите для свойства Path SnapsToDevicePixels значение true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...