2011-11-02 43 views
2

我正在實現這裏提到的拖放解決方案:拖放錯誤:無法訪問沒有裝飾器的元素上的裝飾器

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

我有幾個ListBox es +與WrapPanel和Items。我應該能夠將項目從任何一個框拖放到任何其他框中。

當我拖動一個項目並將其移動到另一個框時,它會拋出我的錯誤:

無法訪問沒有裝飾者的元素上的裝飾器。

此行:

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

我試圖看到AdornedElement的值,我看到它有這個值:

ListBoxItem : DisconnectedItem。我看到了ListBoxItem的內容,似乎它還有斷開的項目。

如果我使用相同的列表框移動我的項目,也會發生這個問題。我的列表框使用wrapPanel作爲ItemsPanelTemplate

層次樹是這樣的列表框是:

1列表框: UserControl 邊框 網格 網格 邊框 邊框 邊框 ScrollViewer ListBox ItemsPanel

其他3個ListBoxes : UserControl 邊框 網格 網格 網格 tabControl tabItem 網格 邊框 邊框 邊框 ScrollViewer ListBox ItemsPanel

AnyOne誰遇到過這個問題或者可以幫我解決問題?

  • Girija
+0

有什麼建議嗎? – Shankar

回答

4

我也能夠重現此問題。我能夠改變的代碼行,以這個來防止錯誤停止:

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

試過的辦法jhamm建議,不幸的是,它不適合我的情況下工作。我最終修改建議在線程上微軟論壇代碼,上面提到:

 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

1

它爲我檢查了的UIElement的adornerlayer可以調用Update之前找到()。

if (AdornerLayer.GetAdornerLayer(uIElement) != null) 
{ 
    this.adornerLayer.Update(uIElement); 
}