2017-09-06 1 views
0

J'utilise le canevas pour dessiner des formes dans WPF. code XAML:Ajouter plus de 10 enfants à une toile dans wpf puis le logiciel devient lent

<Canvas x:Name="canvas1" 
    Background="Transparent" 
    Margin="0,40,0,0" 
    MouseDown="canvas1_MouseDown" 
    MouseMove="canvas1_MouseMove" 
    MouseUp="canvas1_MouseUp" 
    KeyUp="canvas1_KeyUp" > 

</Canvas> 

J'y ai trois événements toile: "vers le bas", "Move", "Up". Je les utilise pour dessiner une forme et ensuite l'ajouter à canvas enfant. Quand j'ajoute plusieurs enfants, ça devient lent.
Voici quelques exemples de code pour ajouter un enfant:

Rectangle rect; 

public void canvas1_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    rect = new Rectangle 
    {        
     StrokeDashArray = { 2,2 }, 
     StrokeThickness = 1 
    }; 
    Canvas.SetTop(rect, startPoint.Y); 
} 

public void canvas1_MouseMove(object sender, MouseButtonEventArgs e) 
{ if(boolVariable){  canvas1.Children.Add(rect); 
    boolVariable=false} 
    rect.Width = w; 
    rect.Height = h; 
    Canvas.SetLeft(rect, x); 
    Canvas.SetTop(rect, y); 
} 

public void canvas1_Mouseup(object sender, MouseButtonEventArgs e) 
{ 
    rect = null; 
} 

Code Cest que je l'utilise pour ajouter différents shapes.Kindly me aider comment je gérer les problèmes de vitesse. Merci.

Répondre

1

Votre erreur se trouve ici:

public void canvas1_MouseMove(object sender, MouseButtonEventArgs e) 
{ 
    canvas1.Children.Add(rect); 
    // ... 
} 

Sur chaque mouvement de la souris, vous ajoutez un nouvel enfant visuel à la Canvas. Bien sûr, à un certain point sera lent parce que vous ajoutez probablement des milliers d'enfants visuels. Déplacer cette ligne vers le gestionnaire d'événements canvas1_MouseDown.

+0

Je contrôle déjà les problèmes en utilisant un boolVariable. et je veux ajouter l'enfant à la souris, c'est pourquoi je l'écris. Toute autre suggestion Parce que ce n'est pas le problème. Même si c'est mon erreur que je n'écris pas le code clair. Tout comme j'ai édité ma question. S'il vous plaît donnez-moi une autre solution –