J'ai une toile et ce je dessine quelques lignes:WPF: Même ligne dessinée différente?
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);
}
Eh bien, rien de spécial, mais il fait des problèmes - les lignes sont dessinées différentes! La toile est à l'intérieur d'un scrollviewer, l'image suivante montre différentes positions de la toile, cependant les lignes devraient ressembler? Enfer, comment est-ce possible? Le code ci-dessus est le seul code que j'ai écrit à la main et c'est le seul contenu de la toile. Quelqu'un sait pourquoi cela arrive et comment empêcher cela? Merci beaucoup! Capture d'écran: http://www.imagebanana.com/view/c01nrd6i/lines.png
Mise à jour
solution fonctionne donc maurizios bien, mais aussi longtemps que vous utilisez le LineGeometry pour positionner la ligne, je reçois encore des lignes floues lorsque j'utilise la toile pour positionner la ligne. Quelqu'un peut s'il vous plaît m'aider avec cela? Merci beaucoup!
capture d'écran de l'échantillon et le code correspondant:
Screenshot: http://www.imagebanana.com/view/lu7z3mcv/canvasposprob.png
code:
// 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);
Comment se fait-il que ce code soit exécuté du tout? * i * n'est jamais plus grand ou égal à 100. – Anzurio
Je ne peux pas reproduire le problème avec le code simple que vous avez expliqué ici (Canvas dans un Scrollviewer). Je suppose qu'il se passe quelque chose d'autre qui cause votre problème ... pouvez-vous développer votre exemple? –
@stefan: Les mises à jour de votre question doivent être faites en éditant votre question. J'ai supprimé vos mises à jour ci-dessous (seules les réponses à votre question devraient y figurer) et les a placées dans votre question sous le texte "Mise à jour". – Sampson