3

タグ( "p")でキャンバス(canvas1)から削除したい楕円(prew)があります。私はこれを試しましたが、機能しません:

var child = (from c in canvas1.Children
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);

それは私にこのエラーを与えました:

「ソースタイプ「System.Windows.Controls.UIElementCollection」のクエリパターンの実装が見つかりませんでした。「場所」が見つかりません。範囲変数「c」のタイプを明示的に指定することを検討してください。」

canvasタグで子を削除するにはどうすればよいですか?

4

2 に答える 2

9

UIElementCollection実装は非常に古いためIEnumerable、デフォルトではLINQと互換性がありません。IEnumerable<T>クエリを実行する前に、強い型に変換する必要があります

var child = (from c in canvas1.Children.Cast<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);

FrameworkElementコレクションにnon(の別の派生)がある場合、このコードはランタイムエラーの疑いがあることに注意してくださいUIElement。これから保護するために、あなたはおそらくOfType方法に行く方が良いでしょう

var child = (from c in canvas1.Children.OfType<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
于 2012-05-29T19:29:16.163 に答える
2
var child = (from FrameworkElement c in canvas1.Children
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);

また

var child = (from c in canvas1.Children.Cast<FrameworkElement>()
             where "p".Equals(c.Tag)
             select c).First();
canvas1.Children.Remove(child);
于 2012-05-29T19:28:59.013 に答える