LayoutRoot
, LayoutAnchorablePane
및 LayoutDocumentPane
과 함께 DockManager
을 사용했습니다.탭을 닫은 후 DockManager에서 LogicalChildren을 제거하는 방법은 무엇입니까?
<ad:DockingManager x:Name="dockManager" >
<adLayout:LayoutRoot>
<adLayout:LayoutPanel x:Name="myLayoutPanel" Orientation="Horizontal">
<adLayout:LayoutAnchorablePane x:Name="myLayoutAnchorablePane" DockWidth="400"/>
<adLayout:LayoutDocumentPane x:Name="myDocumentPane" ChildrenCollectionChanged="myDocumentPane_ChildrenCollectionChanged"/>
</adLayout:LayoutPanel>
</adLayout:LayoutRoot>
</ad:DockingManager>
그러나, 나는 encounted 한 하나의 문제는 DockManager.LogicalChildren
에서 ContentPresenter
내 UserControl
내가 창을 닫을 때 제거되지 도착 결코 LayoutDocument
에 가서 더 LogicalChildren
더가가 시작할 때까지 구축하고 유지하는 것입니다 응용 프로그램을 느리게하십시오.
ChildrenCollectionChanged
을 어떻게 감지합니까? LayoutDocument
과 연결된 ContentPresenter
과 UserControl
을 어떻게 제거합니까?
편집 1 : 좋아, LogicalChildren
이 System.Linq.Enumerable.WhereSelectListIterator<System.WeakReference,object>
, 그래서 내가 그 목록에서 아무것도를 제거 할 수 없습니다 (또한 단지 get
이 없으며, 더 set
).
LayoutDocumentPane.RemoveChild()
메서드는 DockingManager.LogicalChildren
에 아무 것도 수행하지 않으므로 LogicalChildren
에서 반복 날짜를 가져 오는 위치를 파악할 수 없습니다.
편집 2 : 그래서 DockManager
의 DocumentClosing
이벤트 처리기에 이벤트를 추가하려고 시도했지만 아직 DockManager에서 사용되지 않은 LogicalChildren
을 제거하지 않은 것 같습니다.
void dockManager_DocumentClosing(object sender, Xceed.Wpf.AvalonDock.DocumentClosingEventArgs e) {
UserControl uc = e.Document.Content as UserControl;
e.Cancel = true;
e.Document.IsActive = false;
if(uc != null) {
var u = myDocumentPane.Children.Where(a => a.Content.Equals(uc)).FirstOrDefault();
u.IsActive = false;
u.Close();
myDocumentPane.Children.Remove(u);
myDocumentPane.RemoveChild(u);
var oldLogicalParentPaneControl =
LogicalTreeHelper.GetParent(u.Content as UIElement) as Xceed.Wpf.AvalonDock.DockingManager;
oldLogicalParentPaneControl.Layout.RemoveChild(u);
oldLogicalParentPaneControl.Layout.CollectGarbage();
dockManager.UpdateLayout();
}
}
편집 3 : (대신 DocumentClosing
의) 어떤 수정없이 DocumentClosed
후 LayoutDocumentPane
에 남아있는 것을보고 후에는 사용자 제어가 LayoutDocumentPane
에서 제거 있지만 LogicalChildren
에서 여전히 것 같다.
사용중인 avalondock의 버전은 무엇입니까? – Jehof
나는 이것도 전에 가지고 있었다. 내 자신의 해결 방법은 AnchorablePane (Anchorable이있는 다른 것은 무엇이든)을 떼어 내고 'LayoutDocumentPane'을 공장 사이트로 사용하는 것입니다. 나는 당신이했던 것처럼 폐회식을 열었다. –
@Jehof 제가 사용하고 있습니다. v2.0.2000 –