19

これは、FrameworkElement を新しいウィンドウにアタッチして PNG ファイルに公開するときに発生するエラーです。

したがって、私の考えは、親子リンクを削除し、メソッドを呼び出して、このコードで子を再度追加することです:

this.RemoveLogicalChild(element);
PublishFrameworkElement(element, stream);
this.AddLogicalChild(element);

しかし、まったく同じエラーが発生しました...

SO でこのエラーについて多くの質問をしましたが、何が欠けているのでしょうか?

編集:これが私のために働いたコードです:

var element = _GeneratedContent as FrameworkElement;
var ParentPanelCollection = (element.Parent as Panel).Children as UIElementCollection;
ParentPanelCollection.Clear();

FileStream stream = [...]

if (element != null)
{
    PublishFrameworkElement(element, stream);
    ParentPanelCollection.Add(element);
}
stream.Close();
4

4 に答える 4

24

が Panel (例: Grid) の子である場合は、Panel のChildrenコレクションelementから削除する必要があります。のように設定されている場合は、その Content を null (またはそれ以外のもの) に設定する必要があります。ContentContentControlelement

于 2012-02-02T09:51:49.783 に答える
5

ギヨーム、

RemoveLogicalChildの後にRemoveVisualChildメソッドを追加で使用してみることができます。

this.RemoveLogicalChild(element);
this.RemoveVisualChild(element);
PublishFrameworkElement(element, stream);

これがお役に立てば幸いです、Piotr。

于 2012-02-02T09:25:40.463 に答える
1

同様の、しかし少し異なる問題がありましたが、同じエラーメッセージが表示されました。継承されたクラスを作成し、RemoveLogicalChild を呼び出すことで回避策を作成しました (これは保護されたメソッドであるため)。

 public partial class PopupWindow : Window
{
    public PopupWindow()
    {
        InitializeComponent();
    }

    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        this.RemoveLogicalChild(this.Content);    // since protected method
    }
}

それは私のために働いた。ここで見ることができる簡単な例を作成しました。

http://wpfgrid.blogspot.com/2013/01/wpf-error-specified-element-is-already.html

于 2013-01-30T02:09:30.900 に答える