2017-09-06 8 views
0

私はWPFでいくつかの図形を描画するためにキャンバスを使用しています。 XAMLコード: "ダウン"、 "移動"、 "アップ":それはwpfでキャンバスに10以上の子供を追加すると、ソフトウェアが遅くなります

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

</Canvas> 

私は3つのキャンバスのイベントがあります。私はそれらをシェイプを描き、それをキャンバスの子に追加するために使います。私は複数の子供を追加すると、それは遅くなります。私はスピードの問題をどのように処理するか異なるshapes.Kindlyが私を助けて追加するために使用

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

ザッツコード:
はここで子供を追加するためのいくつかのサンプルコードです。おかげさまで

答えて

1

あなたのエラーは次の場所にあります。各マウスの動きに

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

は、あなたがCanvasに新しい子ビジュアルを追加します。もちろん、いくつかの点でそれははおそらく何千もの視覚的な子供を追加するので、遅くなるでしょう。

この行をcanvas1_MouseDownイベントハンドラに移動します。

+0

私はすでにboolVariableを使ってその問題を制御しています。私はそれを書いている理由は、マウスの移動に子供を追加したい。他の提案。それは問題ではないからです。私の間違いは私がコードを書くのではないことですが、私の質問をどのように編集したのですか?私に別の解決策を教えてください –

関連する問題