2010-03-21 6 views
0

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

Comment se fait-il que ce code soit exécuté du tout? * i * n'est jamais plus grand ou égal à 100. – Anzurio

+0

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? –

+0

@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

Répondre

2

Définissez la propriété Chemin SnapsToDevicePixels à true.

+0

Merci pour vos réponses. J'ai eu quelques problèmes avec le formatage, tapé quelque chose de nouveau et à la fin la condition (juste dans le post) était erronée, désolé. Il n'y a vraiment plus de code, le problème pourrait être résolu en utilisant myPath.SnapsToDevicePixels = true; Merci quand même pour toute tentative d'aide! –

+0

oh désolé je n'ai pas vu la réponse, un peu confus qu'il y a des commentaires et des réponses. –

+0

Si la solution que je propose correspond à la vôtre, je serais heureux que vous l'acceptiez. :-) –

Questions connexes