2

ここに記載されているドラッグドロップソリューションを実装しています:

http://bea.stollnitz.com/blog/?p=53

ListBox私はes + with WrapPaneland Itemsをほとんど持っていません。ボックスのいずれかから他のボックスにアイテムをドラッグアンドドロップできるはずです。

アイテムをドラッグして別のボックスに移動すると、次のエラーがスローされます。

装飾を持たない要素の装飾にはアクセスできません。

この行で:

if (this.adornerLayer != null)
{
    this.adornerLayer.Update(this.AdornedElement);
}

AdornedElement の値を確認しようとしましたが、次の値があることがわかりました。

ListBoxItem : DisconnectedItem. のコンテンツを見たところ、ListBoxItem切断されたアイテムもあるようです。

この問題は、同じリストボックス内でアイテムを移動した場合にも発生します。私のリストボックスは wrapPanel を として使用しItemsPanelTemplateます。

階層ツリーは次のようなものです。listBoxes は次のとおりです。

1 リストボックス : UserControl Border Grid Grid Border Border Border ScrollViewer ListBox ItemsPanel

その他 3 ListBoxes : UserControl Border Grid Grid Grid tabControl tabItem Grid Border Border Border ScrollViewer ListBox ItemsPanel

この問題に直面したことがある人、または何がうまくいかないのか教えてくれる人はいますか?

  • ギリヤ
4

4 に答える 4

4

この問題も再現できました。コード行を次のように変更することで、エラー停止を防ぐことができました。

if (this.adornerLayer != null && this.contentPresenter.Content != null)
{
    this.adornerLayer.Update(this.AdornedElement);
}
于 2012-07-20T22:11:45.303 に答える
1

残念ながら、私の場合はうまくいきません。上記のマイクロソフト フォーラムのスレッドで提案されたコードを変更することになりました。

        ContentControl contentCtl = this.AdornedElement as ContentControl;
        if (contentCtl == null ||
            contentCtl.Content == null)
        {
            return;
        }

        var contentType = contentCtl.Content.GetType();
        if (contentType.FullName.Equals("MS.Internal.NamedObject"))
        {
            return;
        }

        if (this.adornerLayer != null &&
            this.contentPresenter.Content != null)
        {
            try
            {
                this.adornerLayer.Update(this.AdornedElement);
            }

小切手

        var contentType = contentCtl.Content.GetType();
        if (contentType.FullName.Equals("MS.Internal.NamedObject"))
        {
            return;
        }

アイテムが切断されると失敗します。

ちなみに、バグは4.5で修正されたと報告されています

于 2013-07-10T21:53:10.487 に答える
1

これは .Net 4.0 のバグです

http://social.msdn.microsoft.com/Forums/en/wpf/thread/e6643abc-4457-44aa-a3ee-dd389c88bd86?prof=必須

これは、タブ コントロールにも表示される場合があります。

何かが実際に表示されないときはいつでも、ビジュアル ツリーから外れると、バインドが台無しになる可能性があります。

于 2011-12-07T23:56:43.887 に答える
1

Update() を呼び出す前に、UIElement の adornerlayer が見つかるかどうかを確認することができました。

if (AdornerLayer.GetAdornerLayer(uIElement) != null)
{
    this.adornerLayer.Update(uIElement);
}
于 2014-10-14T06:28:44.917 に答える