2010-11-25 12 views
2

私はグラフ上のちょうど2つの垂直線である "分析範囲"をプロットしているチャートコントロールに取り組んでいます。 2つの分析範囲の行だけを削除する方法がわからないので、分析範囲を変更するときに問題が発生するので、グラフをクリアして、実際のデータ値とそれ以外のものを再びプロットします。これらのUI要素にタグを付ける方法はありますか(つまり、分析範囲はグリッドラインのUI要素なので)、具体的に削除することはできますか?私はどこかのUI要素の "インデックス"を保存してこれらを削除することができますが、これを行うよりクリーンな方法があるのだろうかと思います。どうもありがとう。WPF - Canvas.Childrenから特定の子を削除する方法はありますか?

答えて

2

すべてUIElementには、文字列であるUIDがあります。範囲線のUIDを予測可能なものに設定することができます。ユニークでなければならないことを心に留めておく。その後、グリッド線のみを削除する必要がある場合は、削除する必要のあるUI要素のリストを収集して子コレクションを繰り返して削除します。

このような何か:

Canvas c = new Canvas(); 
c.Children.Add(new UIElement() { Uid = "Line1" }); 
c.Children.Add(new UIElement() { Uid = "Line2" }); 
c.Children.Add(new UIElement() { Uid = "Line3" }); 
c.Children.Add(new UIElement() { Uid = "Text1" }); //This is added as a sample 

List<UIElement> itemstoremove = new List<UIElement>(); 
foreach (UIElement ui in c.Children) 
{ 
    if (ui.Uid.StartsWith("Line")) 
    { 
    itemstoremove.Add(ui); 
    } 
} 
foreach (UIElement ui in itemstoremove) 
{ 
    c.Children.Remove(ui); 
} 

動作するはずです。デバッグ時にこのコードを簡単にテストすると、子どもの数は1になり、リストにはUid of Text1があるUIElementだけが表示されます。

1

Canvasに2行を追加すると、2行の参照を保持できません。そうすれば、それらを再描画する必要があるときは、Canvas.Children.Remove(line1)Canvas.Children.Remove(line2)を実行します。その後、線の参照を更新し、キャンバスに再度追加します。線自体を削除して再追加するのではなく、線自体のX値とY値を更新するだけでも可能です。このようにして、Chartは単に行を移動します。

しかし、基本的には、キーをCanvasに追加してからその行への参照を維持することです。

関連する問題