Index: Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml =================================================================== diff -u -rfea3ed82dfb6dfcad535eef16efcbaa9c01564ed -rdc82459b6adaa2473b0459db3f2ee20455277ab8 --- Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml (.../AvalonDockViewHost.xaml) (revision fea3ed82dfb6dfcad535eef16efcbaa9c01564ed) +++ Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml (.../AvalonDockViewHost.xaml) (revision dc82459b6adaa2473b0459db3f2ee20455277ab8) @@ -49,19 +49,29 @@ - - + + - + - + + + + + + + + + + + Index: Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml.cs =================================================================== diff -u -rd52aa340885d10c5932c381d4283062c8dddd76b -rdc82459b6adaa2473b0459db3f2ee20455277ab8 --- Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml.cs (.../AvalonDockViewHost.xaml.cs) (revision d52aa340885d10c5932c381d4283062c8dddd76b) +++ Core/Common/src/Core.Common.Gui/Forms/ViewHost/AvalonDockViewHost.xaml.cs (.../AvalonDockViewHost.xaml.cs) (revision dc82459b6adaa2473b0459db3f2ee20455277ab8) @@ -56,6 +56,8 @@ public AvalonDockViewHost() { InitializeComponent(); + dummyPanelA.Hide(); + dummyPanelB.Hide(); toolViews = new List(); documentViews = new List(); @@ -169,6 +171,7 @@ SetFocusToView(view); layoutAnchorable.Hiding += OnLayoutAnchorableHiding; + layoutAnchorable.Closing += OnLayoutAnchorableClosing; } public void Remove(IView view) @@ -185,12 +188,14 @@ SetFocusToView(view); } - GetLayoutContent(view).Close(); + var layoutDocument = GetLayoutContent(view); + layoutDocument.Close(); UpdateDockingManager(); } else if (toolViews.Contains(view)) { - GetLayoutContent(view).Hide(); + var layoutAnchorable = GetLayoutContent(view); + layoutAnchorable.Hide(); UpdateDockingManager(); } @@ -303,7 +308,7 @@ private void OnLayoutDocumentClosing(object sender, CancelEventArgs e) { - var layoutDocument = (LayoutDocument) sender; + var layoutDocument = (LayoutDocument)sender; var view = GetView(layoutDocument.Content); if (ActiveDocumentView == view) @@ -315,23 +320,34 @@ } } + private void OnLayoutAnchorableHiding(object sender, CancelEventArgs eventArgs) + { + var layoutAnchorable = (LayoutAnchorable)sender; + + layoutAnchorable.Hiding -= OnLayoutAnchorableHiding; + layoutAnchorable.Closing -= OnLayoutAnchorableClosing; + + layoutAnchorable.Close(); + OnViewClosed(GetView(layoutAnchorable.Content)); + + eventArgs.Cancel = true; + } + private void OnLayoutDocumentClosed(object sender, EventArgs e) { - var layoutDocument = (LayoutDocument) sender; + var layoutDocument = (LayoutDocument)sender; layoutDocument.Closing -= OnLayoutDocumentClosing; layoutDocument.Closed -= OnLayoutDocumentClosed; OnViewClosed(GetView(layoutDocument.Content)); } - private void OnLayoutAnchorableHiding(object sender, CancelEventArgs e) + private void OnLayoutAnchorableClosing(object sender, CancelEventArgs e) { - var layoutAnchorable = (LayoutAnchorable) sender; - - layoutAnchorable.Hiding -= OnLayoutAnchorableHiding; - - OnViewClosed(GetView(layoutAnchorable.Content)); + var layoutAnchorable = (LayoutAnchorable)sender; + layoutAnchorable.Hide(); + e.Cancel = true; } private void OnViewClosed(IView view) @@ -388,19 +404,35 @@ private void AddLayoutAnchorable(LayoutAnchorable layoutAnchorable, ToolViewLocation toolViewLocation) { - var layoutAnchorablePaneGroup = new LayoutAnchorablePaneGroup(); - + LayoutAnchorablePaneGroup layoutAnchorablePaneGroup = null; switch (toolViewLocation) { case ToolViewLocation.Left: + if (leftLayoutAnchorablePaneGroup.Parent == null) + { + leftLayoutAnchorablePaneGroup.Children.Add(new LayoutAnchorablePane()); + leftRightLayoutTarget.Children.Insert(0, leftLayoutAnchorablePaneGroup); + } layoutAnchorablePaneGroup = leftLayoutAnchorablePaneGroup; break; case ToolViewLocation.Bottom: + if (bottomLayoutAnchorablePaneGroup.Parent == null) + { + bottomLayoutAnchorablePaneGroup.Children.Add(new LayoutAnchorablePane()); + bottomLayoutTarget.Children.Add(bottomLayoutAnchorablePaneGroup); + } layoutAnchorablePaneGroup = bottomLayoutAnchorablePaneGroup; break; case ToolViewLocation.Right: + if (rightLayoutAnchorablePaneGroup.Parent == null) + { + rightLayoutAnchorablePaneGroup.Children.Add(new LayoutAnchorablePane()); + leftRightLayoutTarget.Children.Add(rightLayoutAnchorablePaneGroup); + } layoutAnchorablePaneGroup = rightLayoutAnchorablePaneGroup; break; + default: + throw new InvalidEnumArgumentException("toolViewLocation", (int)toolViewLocation, typeof(ToolViewLocation)); } layoutAnchorablePaneGroup.Descendents()