.Net 4.0 では、次のコードは「指定された要素は既に別の要素の論理的な子です。最初に切断してください。」InvalidOperationException
というメッセージをスローします。
var parent = new System.Windows.Controls.ContentControl();
var child = new System.Windows.Controls.Button();
parent.Content = child;
var parent2 = new System.Windows.Controls.ContentControl();
parent2.Content = child; // throws InvalidOperationException in .Net 4.0, not in 4.5
ただし、.Net 4.5 がインストールされているマシンでこのコードを実行しても、例外はスローされません。これにより、ビジュアル ツリーに奇妙な状態が発生し、正しくない UI として表示されるようです。
なぜ例外がないのですか?このthrow
ステートメントは .Net 4.5 にもまだ存在しているようFrameworkElement.AddLogicalChild
です。投げられない原因は何ですか?
正当な理由で動作が変更されたことを喜んで受け入れ、コーディングを変更する必要がありますが、現状では、UI の破損によるサイレント フェイルは、 FrameworkElement
論理ツリーから忘れていました。