/// <summary> /// Abre / cierra un panel lateral /// </summary> public void OpenGroup(DockPosition position) { LayoutAnchorGroup layoutGroup = GetGroupPane(Layout, position); // Abre el panel if (layoutGroup.Children.Count > 0) { // Cambia el ancho / alto del grupo switch (position) { case DockPosition.Left: case DockPosition.Right: layoutGroup.Children[0].AutoHideWidth = 400; layoutGroup.Children[0].AutoHideMinWidth = 200; break; default: layoutGroup.Children[0].AutoHideHeight = 600; layoutGroup.Children[0].AutoHideMinHeight = 600; break; } // Cambia el autohide para que aparezca //? Después de ejecutar esta instrucción, parece que se cambia el grupo, por tanto ya no podemos utilizar layoutGroup.Children[0] //? que provocaría una excepción layoutGroup.Children[0].ToggleAutoHide(); } }
internal LayoutAnchorGroupControl(LayoutAnchorGroup model) { _model = model; CreateChildrenViews(); _model.Children.CollectionChanged += (s, e) => OnModelChildrenCollectionChanged(e); }
/// <summary> /// Añade / selecciona un panel /// </summary> public void AddPane(string id, string header, UserControl control, object tag = null, DockPosition position = DockPosition.Bottom) { DockLayoutDocument previous = GetDocument(id); if (previous != null) { previous.LayoutContent.IsActive = true; ActiveDocument = previous; } else { LayoutAnchorGroup layoutGroup = GetGroupPane(Layout, position); LayoutAnchorable layoutPane = new LayoutAnchorable { Title = header, ToolTip = header }; // Añade el contenido layoutPane.Content = control; layoutPane.ContentId = id; // Añade el contenido al grupo layoutGroup.Children.Add(layoutPane); layoutPane.IsActive = true; layoutPane.IsVisible = true; // Asigna los parámetros del grupo layoutPane.FloatingHeight = 400; layoutPane.FloatingWidth = 400; // Añade el panel a la lista de documentos del controlador AddDocument(id, header, DockLayoutDocument.DocumentType.Panel, layoutPane, control, tag); } }
public static LayoutAnchorGroup AddGroup(this LayoutAnchorSide side) { var group = new LayoutAnchorGroup(); side.AddChild(group); return(group); }
internal LayoutAnchorGroupControl(LayoutAnchorGroup model) { _model = model; CreateChildrenViews(); _model.Children.CollectionChanged += (s, e) => OnModelChildrenCollectionChanged(e); }
/// <summary> /// Activates the dockable pane that contains the given control. /// The search is performed by matching the pane's ContentId to the /// controls's Name. If no dockable pane contains the control, one is /// created at the bottom side of the docking root; in this case, the /// control's ToolTip (if it is a non-null string) is used as the /// pane's Title. /// </summary> /// <param name="control">The control to activate.</param> /// <remarks> /// This code is partly adapted from AvalonDock samples. It's not /// clear how it's done, but normally it works. /// </remarks> private void ActivateToolWindow(Control control) { if (control == null) { throw new ArgumentNullException("control"); } string contentId = control.Name; LayoutAnchorable pane = dockingManager.Layout.Descendents().OfType < LayoutAnchorable>().SingleOrDefault(a => a.ContentId == contentId); if (pane == null) { // The pane is not created. This can happen for example when // we load from an old layout configuration file, and the // pane is not defined in that file. In this case, we add the // control to a default location. var anchorSide = dockingManager.BottomSidePanel.Model as LayoutAnchorSide; LayoutAnchorGroup anchorGroup; if (anchorSide.ChildrenCount == 0) { anchorGroup = new LayoutAnchorGroup(); anchorSide.Children.Add(anchorGroup); } else { anchorGroup = anchorSide.Children[0]; } pane = new LayoutAnchorable(); pane.ContentId = contentId; pane.Content = control; if (control.ToolTip is string) { pane.Title = (string)control.ToolTip; } anchorGroup.Children.Add(pane); } if (pane.IsHidden) { pane.Show(); } else if (pane.IsVisible) { pane.IsActive = true; } else { pane.AddToLayout(dockingManager, AnchorableShowStrategy.Bottom | AnchorableShowStrategy.Most); } //control.Focus //if (!control.Focus()) // throw new InvalidOperationException(); //Keyboard.Focus(control); }
/// <summary> /// Muestra un panel /// </summary> public void ShowPane(string windowID, string title, System.Windows.Controls.UserControl control, SystemControllerEnums.DockPosition position = SystemControllerEnums.DockPosition.Bottomm) { LayoutContent previous = GetLayoutPrevious(windowID); if (previous != null) { previous.IsActive = true; } else { LayoutAnchorGroup layoutGroup = GetGroupPane(DockManager.Layout, position); LayoutAnchorable layoutPane = new LayoutAnchorable { Title = title, ToolTip = title }; // Añade el contenido layoutPane.Content = control; layoutPane.ContentId = windowID; // Añade el contenido al grupo layoutGroup.Children.Add(layoutPane); // Añade el panel a la lista de documentos del controlador AddDocument(new ToolViewModel(windowID, title, layoutPane, control, position)); } }
private void AddTwoDocuments_click(object sender, RoutedEventArgs e) { var firstDocumentPane = dockManager.Layout.Descendents().OfType <LayoutDocumentPane>().FirstOrDefault(); if (firstDocumentPane != null) { LayoutDocument doc = new LayoutDocument(); doc.Title = "Test1"; firstDocumentPane.Children.Add(doc); LayoutDocument doc2 = new LayoutDocument(); doc2.Title = "Test2"; firstDocumentPane.Children.Add(doc2); } var leftAnchorGroup = dockManager.Layout.LeftSide.Children.FirstOrDefault(); if (leftAnchorGroup == null) { leftAnchorGroup = new LayoutAnchorGroup(); dockManager.Layout.LeftSide.Children.Add(leftAnchorGroup); } leftAnchorGroup.Children.Add(new LayoutAnchorable() { Title = "New Anchorable" }); }
/// <summary> /// 添加内容面板 /// </summary> /// <param name="documentPane"></param> /// <param name="title"></param> internal LayoutAnchorable AddLayoutAnchorable(LayoutAnchorGroup pane, string title) { LayoutAnchorable anchorable = new LayoutAnchorable(); anchorable.Title = title; pane.Children.Add(anchorable); return(anchorable); }
/// <summary> /// 初始化主要内容的容器控件 /// </summary> private void initMianContentControl() { mianContentControl = new DockingManager(); mianContentControl.BorderBrush = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush; mianContentControl.Theme = new Xceed.Wpf.AvalonDock.Themes.MetroTheme(); mianContentControl.DocumentClosed += MianContentControl_DocumentClosed; var v = Utility.Windows.ResourceHelper.FindResource(@"DockDocumentHeaderTemplate"); DataTemplate dataTemplate = v as DataTemplate; mianContentControl.DocumentHeaderTemplate = dataTemplate; LayoutRoot layoutRoot = new LayoutRoot(); mianContentControl.Layout = layoutRoot; LayoutAnchorSide layoutAnchorSide = new LayoutAnchorSide(); layoutRoot.LeftSide = layoutAnchorSide; LayoutAnchorGroup layoutAnchorGroup = new LayoutAnchorGroup(); layoutAnchorSide.Children.Add(layoutAnchorGroup); LayoutAnchorable layoutAnchorable = new LayoutAnchorable(); layoutAnchorable.Title = Utility.Windows.ResourceHelper.FindResource(@"NavigationMenu").ToString(); layoutAnchorable.IconSource = Utility.Windows.BitmapImageHelper.GetBitmapImage("Images/Folder_32.png", 16, 16); layoutAnchorable.CanAutoHide = true; layoutAnchorable.CanClose = false; layoutAnchorable.CanFloat = false; layoutAnchorable.CanHide = false; layoutAnchorable.IsMaximized = false; layoutAnchorable.AutoHideMinWidth = (double)Utility.Windows.ResourceHelper.FindResource(@"LeftTreeAutoHideMinWidth"); layoutAnchorGroup.Children.Add(layoutAnchorable); layoutAnchorable.ToggleAutoHide(); //TreeView treeView = new TreeView(); //layoutAnchorable.Content = new ContentControl ()(Prism.Regions.RegionManager.SetRegionName (""); //Prism.Regions.RegionManager.GetRegionName(layoutAnchorable, "TreeMenuModule"); //treeView.ItemsSource = this.MenuItems; //layoutAnchorable.Content = //Style style = new Style(); ; //style.TargetType = typeof(TreeViewItem); //style.BasedOn = Utility.Windows.ResourceHelper.FindResource(@"MetroTreeViewItem") as Style; //treeView.ItemContainerStyle = style; var treeMenuContent = new ContentControl(); layoutAnchorable.Content = treeMenuContent; Prism.Regions.RegionManager.SetRegionName(treeMenuContent, "TreeMenuRegion"); //Prism.Regions.RegionManager.SetRegionName(layoutAnchorable, "TreeMenuModule"); //var regionManager = containerProvider.Resolve<IRegionManager>(); //regionManager.RegisterViewWithRegion("ShellContentRegion", typeof(ShellView)); LayoutDocumentPaneGroup layoutDocumentPaneGroup = new LayoutDocumentPaneGroup(); layoutRoot.RootPanel.Orientation = Orientation.Horizontal; layoutRoot.RootPanel.Children[1] = layoutDocumentPaneGroup; layoutDocumentPaneGroup.InsertChildAt(0, layoutDocumentPane); }
public void AddChildrenToRightSide(string title, FrameworkElement element) { LayoutAnchorGroup dp = this.DManager.Layout.RightSide.Children[0] as LayoutAnchorGroup; LayoutAnchorable d = new LayoutAnchorable(); d.Title = title; d.Content = element; dp.Children.Add(d); }
internal void Show(LayoutAnchorControl anchor) { if (!(anchor.Model.Parent.Parent is LayoutAnchorSide)) { //var root = Root; if (anchor.Model is LayoutAnchorable && anchor.Model.Parent is LayoutRoot) { var model = anchor.Model as LayoutAnchorable; var root = anchor.Model.Parent as LayoutRoot; var newAnchorGroup = new LayoutAnchorGroup(); newAnchorGroup.Children.Add(model); AnchorSide anchorSide = LayoutSetting.GetDefaultSideAnchorable(model.Title); switch (anchorSide) { case AnchorSide.Right: root.RightSide.Children.Add(newAnchorGroup); break; case AnchorSide.Left: root.LeftSide.Children.Add(newAnchorGroup); break; case AnchorSide.Top: root.TopSide.Children.Add(newAnchorGroup); break; case AnchorSide.Bottom: root.BottomSide.Children.Add(newAnchorGroup); break; } } else { return; } } if (_model != null) { throw new InvalidOperationException(); } _anchor = anchor; _model = anchor.Model as LayoutAnchorable; _side = (anchor.Model.Parent.Parent as LayoutAnchorSide).Side; _manager = _model.Root.Manager; CreateInternalGrid(); _model.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_model_PropertyChanged); Visibility = System.Windows.Visibility.Visible; InvalidateMeasure(); UpdateWindowPos(); Trace.WriteLine("LayoutAutoHideWindowControl.Show()"); }
public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer) { //AD wants to add the anchorable into destinationContainer //just for test provide a new anchorablepane //if the pane is floating let the manager go ahead LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane; if (destinationContainer != null && destinationContainer.FindParent <LayoutFloatingWindow>() != null) { return(false); } //var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ToolsPane"); Type toolType = anchorableToShow.Content.GetType(); var docData = _dockViewmodel.Data.DocumentTypeData.FirstOrDefault(a => a.DocType == _dockViewmodel.Data.ActiveDocument.GetType()); var pos = docData.DicToolDockPosition[toolType]; LayoutAnchorSide side = GetAnchorSide(pos, layout); if (side.Children.Count == 0) { var group = new LayoutAnchorGroup(); group.Children.Add(anchorableToShow); side.Children.Add(group); SetToolPaneProperties(anchorableToShow); return(true); } else { side.Children[0].Children.Add(anchorableToShow); SetToolPaneProperties(anchorableToShow); return(true); } return(false); //return true; }
public static LayoutAnchorGroup FirstOrAdd(this LayoutAnchorSide side) { var group = side.Children.FirstOrDefault <LayoutAnchorGroup>(); if (group is null) { group = new LayoutAnchorGroup(); side.AddChild(group); } return(group); }
//http://avalondock.codeplex.com/wikipage?title=AvalonDock%202.0%20Getting%20Start%20Guide&referringTitle=Documentation public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer) { if (anchorableToShow.Content is ITool) { var preferredLocation = ((ITool) anchorableToShow.Content).PreferredLocation; string paneName = GetPaneName(preferredLocation); var toolsPane = layout.Descendents().OfType<LayoutAnchorablePane>().FirstOrDefault(d => d.Name == paneName); if (toolsPane == null) { switch (preferredLocation) { case PaneLocation.Left: { //TODO: this should use two steps: first, try to add to existing "LayoutAnchorablePane" if not create layoutAnchorGroup like below var layoutAnchorSide = layout.Descendents().OfType<LayoutAnchorSide>().First(side => side.Side == AnchorSide.Left); var layoutAnchorGroup = new LayoutAnchorGroup(); layoutAnchorGroup.InsertChildAt(0, anchorableToShow); layoutAnchorSide.InsertChildAt(0, layoutAnchorGroup); anchorableToShow.AutoHideWidth = 200; //var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal); //toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) }; } break; case PaneLocation.Right: { var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal); toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) }; parent.Children.Add(toolsPane); } break; case PaneLocation.Bottom: { var ds = layout.Descendents().ToList(); var items = layout.Descendents().OfType<LayoutPanel>().ToList(); var items2 = layout.Descendents().OfType<LayoutAnchorGroup>().ToList(); //var parent = items2.First(); var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Vertical); toolsPane = new LayoutAnchorablePane { DockHeight = new GridLength(300, GridUnitType.Pixel) }; parent.Children.Add(toolsPane); } break; default: throw new ArgumentOutOfRangeException(); } } if(toolsPane != null) toolsPane.Children.Add(anchorableToShow); return true; } return false; }
/// <summary> /// 初始化主要内容的容器控件 /// </summary> private void initMianContentControl() { mianContentControl = new DockingManager(); mianContentControl.BorderBrush = Utility.Windows.ResourceHelper.FindResource(@"AccentColorBrush") as System.Windows.Media.Brush; mianContentControl.Theme = new Xceed.Wpf.AvalonDock.Themes.MetroTheme(); mianContentControl.DocumentClosed += MianContentControl_DocumentClosed; var v = Utility.Windows.ResourceHelper.FindResource(@"DockDocumentHeaderTemplate"); DataTemplate dataTemplate = v as DataTemplate; mianContentControl.DocumentHeaderTemplate = dataTemplate; mianContentControl.Background = Utility.Windows.ResourceHelper.FindResource(@"DesktopBackground") as System.Windows.Media.ImageBrush; LayoutRoot layoutRoot = new LayoutRoot(); mianContentControl.Layout = layoutRoot; LayoutAnchorSide layoutAnchorSide = new LayoutAnchorSide(); layoutRoot.LeftSide = layoutAnchorSide; LayoutAnchorGroup layoutAnchorGroup = new LayoutAnchorGroup(); layoutAnchorSide.Children.Add(layoutAnchorGroup); LayoutAnchorable layoutAnchorable = new LayoutAnchorable(); layoutAnchorable.Title = Utility.Windows.ResourceHelper.FindResource(@"NavigationMenu").ToString(); layoutAnchorable.IconSource = Utility.Windows.ResourceHelper.FindResource(@"Folder_32x32") as System.Windows.Media.ImageSource; layoutAnchorable.CanAutoHide = true; layoutAnchorable.CanClose = false; layoutAnchorable.CanFloat = false; layoutAnchorable.CanHide = false; layoutAnchorable.IsMaximized = false; layoutAnchorable.AutoHideMinWidth = (double)Utility.Windows.ResourceHelper.FindResource(@"LeftTreeAutoHideMinWidth"); layoutAnchorGroup.Children.Add(layoutAnchorable); layoutAnchorable.ToggleAutoHide(); TreeView treeView = new TreeView(); layoutAnchorable.Content = treeView; treeView.ItemsSource = this.MenuItems; Style style = new Style();; style.TargetType = typeof(TreeViewItem); style.BasedOn = Utility.Windows.ResourceHelper.FindResource(@"MetroTreeViewItem") as Style; treeView.ItemContainerStyle = style; LayoutDocumentPaneGroup layoutDocumentPaneGroup = new LayoutDocumentPaneGroup(); layoutRoot.RootPanel.Orientation = Orientation.Horizontal; layoutRoot.RootPanel.Children[1] = layoutDocumentPaneGroup; layoutDocumentPaneGroup.InsertChildAt(0, layoutDocumentPane); }
/// <summary> /// Initializes static members of the <see cref="AvalonDockHelper"/> class. /// </summary> static AvalonDockHelper() { ContextualViewModelManager = ServiceLocator.Default.ResolveType <IContextualViewModelManager>(); DockingManager = ServiceLocator.Default.ResolveType <DockingManager>(); DockingManager.DocumentClosing += OnDockingManagerDocumentClosing; DockingManager.DocumentClosed += OnDockingManagerDocumentClosed; DockingManager.ActiveContentChanged += DockingManagerActiveContentChanged; LayoutDocumentPane = ServiceLocator.Default.ResolveType <LayoutDocumentPane>(); LayoutAnchorGroup = ServiceLocator.Default.ResolveType <LayoutAnchorGroup>(); RightLayoutAnchorablePane = (LayoutAnchorablePane)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorablePane), "rightPropertiesPane"); LeftLayoutAnchorablePane = (LayoutAnchorablePane)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorablePane), "leftPropertiesPane"); BottomPropertiesPane = (LayoutAnchorGroup)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorGroup), "bottomPropertiesPane"); TopPropertiesPane = (LayoutAnchorGroup)ServiceLocator.Default.ResolveType(typeof(LayoutAnchorGroup), "topPropertiesPane"); }
private static LayoutAnchorGroup FindAnchorableGroup(LayoutRoot layout, PaneLocation location) { try { LayoutAnchorSide panelGroupParent = null; switch (location) { case PaneLocation.Left: panelGroupParent = layout.LeftSide; break; case PaneLocation.Right: panelGroupParent = layout.RightSide; break; case PaneLocation.Bottom: panelGroupParent = layout.BottomSide; break; default: throw new ArgumentOutOfRangeException("location:" + location); } if (panelGroupParent.Children.Count == 0) { var layoutAnchorGroup = new LayoutAnchorGroup(); panelGroupParent.Children.Add(layoutAnchorGroup); return(layoutAnchorGroup); } else { return(panelGroupParent.Children[0]); } } catch (Exception exp) { logger.Error(exp); } return(null); }
/// <summary> /// 接入新的Window到侧边栏(WPF Only) /// </summary> /// <param name="wd">WPF窗口</param> /// <param name="title">标题</param> public void AddSidebarWpf(Object wd, String title) { var rightAnchorGp = _dManager.Layout.RightSide.Children.FirstOrDefault(); if (rightAnchorGp == null) { rightAnchorGp = new LayoutAnchorGroup(); _dManager.Layout.RightSide.Children.Add(rightAnchorGp); } var layAnc = new LayoutAnchorable { Title = title, Content = wd, CanAutoHide = true }; rightAnchorGp.Children.Add(layAnc); }
/// <summary> /// Method is called when a completely new layout item is /// to be inserted into the current avalondock layout. /// </summary> /// <param name="layout"></param> /// <param name="anchorableToShow"></param> /// <param name="destinationContainer"></param> /// <returns></returns> public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer) { if (anchorableToShow.Content is IToolWindow) { IToolWindow tool = anchorableToShow.Content as IToolWindow; var preferredLocation = tool.PreferredLocation; LayoutAnchorGroup layoutGroup = null; switch (preferredLocation) { case PaneLocation.Left: layoutGroup = FindAnchorableGroup(layout, preferredLocation); break; case PaneLocation.Right: layoutGroup = FindAnchorableGroup(layout, preferredLocation); break; case PaneLocation.Bottom: layoutGroup = FindAnchorableGroup(layout, preferredLocation); break; default: throw new ArgumentOutOfRangeException(); } if (layoutGroup != null) { ////group.InsertChildAt(0, anchorableToShow); layoutGroup.Children.Add(anchorableToShow); } return(true); } return(false); }
private void AddTwoDocuments_click(object sender, RoutedEventArgs e) { var firstDocumentPane = dockManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault(); if (firstDocumentPane != null) { LayoutDocument doc = new LayoutDocument(); doc.Title = "Test1"; firstDocumentPane.Children.Add(doc); LayoutDocument doc2 = new LayoutDocument(); doc2.Title = "Test2"; firstDocumentPane.Children.Add(doc2); } var leftAnchorGroup = dockManager.Layout.LeftSide.Children.FirstOrDefault(); if (leftAnchorGroup == null) { leftAnchorGroup = new LayoutAnchorGroup(); dockManager.Layout.LeftSide.Children.Add(leftAnchorGroup); } leftAnchorGroup.Children.Add(new LayoutAnchorable() { Title = "New Anchorable" }); }
/// <summary> /// 接入新的Window到侧边栏(WPF Only) /// </summary> /// <param name="wd">WPF窗口</param> /// <param name="title">标题</param> public void AddSidebarWpf(Object wd, String title) { var rightAnchorGp = _dManager.Layout.RightSide.Children.FirstOrDefault(); if (rightAnchorGp == null) { rightAnchorGp = new LayoutAnchorGroup(); _dManager.Layout.RightSide.Children.Add(rightAnchorGp); } var layAnc = new LayoutAnchorable { Title = title, Content = wd, CanAutoHide = true }; rightAnchorGp.Children.Add(layAnc); }
//http://avalondock.codeplex.com/wikipage?title=AvalonDock%202.0%20Getting%20Start%20Guide&referringTitle=Documentation public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer) { if (anchorableToShow.Content is ITool) { var preferredLocation = ((ITool)anchorableToShow.Content).PreferredLocation; string paneName = GetPaneName(preferredLocation); var toolsPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == paneName); if (toolsPane == null) { switch (preferredLocation) { case PaneLocation.Left: { //TODO: this should use two steps: first, try to add to existing "LayoutAnchorablePane" if not create layoutAnchorGroup like below var layoutAnchorSide = layout.Descendents().OfType <LayoutAnchorSide>().First(side => side.Side == AnchorSide.Left); var layoutAnchorGroup = new LayoutAnchorGroup(); layoutAnchorGroup.InsertChildAt(0, anchorableToShow); layoutAnchorSide.InsertChildAt(0, layoutAnchorGroup); anchorableToShow.AutoHideWidth = 200; //var parent = layout.Descendents().OfType<LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal); //toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) }; } break; case PaneLocation.Right: { var parent = layout.Descendents().OfType <LayoutPanel>().First(d => d.Orientation == Orientation.Horizontal); toolsPane = new LayoutAnchorablePane { DockWidth = new GridLength(200, GridUnitType.Pixel) }; parent.Children.Add(toolsPane); } break; case PaneLocation.Bottom: { var ds = layout.Descendents().ToList(); var items = layout.Descendents().OfType <LayoutPanel>().ToList(); var items2 = layout.Descendents().OfType <LayoutAnchorGroup>().ToList(); //var parent = items2.First(); var parent = layout.Descendents().OfType <LayoutPanel>().First(d => d.Orientation == Orientation.Vertical); toolsPane = new LayoutAnchorablePane { DockHeight = new GridLength(300, GridUnitType.Pixel) }; parent.Children.Add(toolsPane); } break; default: throw new ArgumentOutOfRangeException(); } } if (toolsPane != null) { toolsPane.Children.Add(anchorableToShow); } return(true); } return(false); }
/// <summary> /// Activates the dockable pane that contains the given control. /// The search is performed by matching the pane's ContentId to the /// controls's Name. If no dockable pane contains the control, one is /// created at the bottom side of the docking root; in this case, the /// control's ToolTip (if it is a non-null string) is used as the /// pane's Title. /// </summary> /// <param name="control">The control to activate.</param> /// <remarks> /// This code is partly adapted from AvalonDock samples. It's not /// clear how it's done, but normally it works. /// </remarks> private void ActivateToolWindow(Control control) { if (control == null) throw new ArgumentNullException("control"); string contentId = control.Name; LayoutAnchorable pane = dockingManager.Layout.Descendents().OfType< LayoutAnchorable>().SingleOrDefault(a => a.ContentId == contentId); if (pane == null) { // The pane is not created. This can happen for example when // we load from an old layout configuration file, and the // pane is not defined in that file. In this case, we add the // control to a default location. var anchorSide = dockingManager.BottomSidePanel.Model as LayoutAnchorSide; LayoutAnchorGroup anchorGroup; if (anchorSide.ChildrenCount == 0) { anchorGroup = new LayoutAnchorGroup(); anchorSide.Children.Add(anchorGroup); } else { anchorGroup = anchorSide.Children[0]; } pane = new LayoutAnchorable(); pane.ContentId = contentId; pane.Content = control; if (control.ToolTip is string) { pane.Title = (string)control.ToolTip; } anchorGroup.Children.Add(pane); } if (pane.IsHidden) { pane.Show(); } else if (pane.IsVisible) { pane.IsActive = true; } else { pane.AddToLayout(dockingManager, AnchorableShowStrategy.Bottom | AnchorableShowStrategy.Most); } //control.Focus //if (!control.Focus()) // throw new InvalidOperationException(); //Keyboard.Focus(control); }
internal LayoutAnchorGroupControl(LayoutAnchorGroup model) { this._model = model; this.CreateChildrenViews(); this._model.Children.CollectionChanged += new NotifyCollectionChangedEventHandler((object s, NotifyCollectionChangedEventArgs e) => this.OnModelChildrenCollectionChanged(e)); }
public void ToggleAutoHide() { #region Anchorable is already auto hidden if (IsAutoHidden) { var parentGroup = Parent as LayoutAnchorGroup; var parentSide = parentGroup.Parent as LayoutAnchorSide; var previousContainer = ((ILayoutPreviousContainer)parentGroup).PreviousContainer as LayoutAnchorablePane; if (previousContainer == null) { AnchorSide side = (parentGroup.Parent as LayoutAnchorSide).Side; switch (side) { case AnchorSide.Right: if (parentGroup.Root.RootPanel.Orientation == Orientation.Horizontal) { previousContainer = new LayoutAnchorablePane(); parentGroup.Root.RootPanel.Children.Add(previousContainer); } else { previousContainer = new LayoutAnchorablePane(); LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Horizontal }; LayoutRoot root = parentGroup.Root as LayoutRoot; LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel; root.RootPanel = panel; panel.Children.Add(oldRootPanel); panel.Children.Add(previousContainer); } break; case AnchorSide.Left: if (parentGroup.Root.RootPanel.Orientation == Orientation.Horizontal) { previousContainer = new LayoutAnchorablePane(); parentGroup.Root.RootPanel.Children.Insert(0, previousContainer); } else { previousContainer = new LayoutAnchorablePane(); LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Horizontal }; LayoutRoot root = parentGroup.Root as LayoutRoot; LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel; root.RootPanel = panel; panel.Children.Add(previousContainer); panel.Children.Add(oldRootPanel); } break; case AnchorSide.Top: if (parentGroup.Root.RootPanel.Orientation == Orientation.Vertical) { previousContainer = new LayoutAnchorablePane(); parentGroup.Root.RootPanel.Children.Insert(0, previousContainer); } else { previousContainer = new LayoutAnchorablePane(); LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Vertical }; LayoutRoot root = parentGroup.Root as LayoutRoot; LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel; root.RootPanel = panel; panel.Children.Add(previousContainer); panel.Children.Add(oldRootPanel); } break; case AnchorSide.Bottom: if (parentGroup.Root.RootPanel.Orientation == Orientation.Vertical) { previousContainer = new LayoutAnchorablePane(); parentGroup.Root.RootPanel.Children.Add(previousContainer); } else { previousContainer = new LayoutAnchorablePane(); LayoutPanel panel = new LayoutPanel() { Orientation = Orientation.Vertical }; LayoutRoot root = parentGroup.Root as LayoutRoot; LayoutPanel oldRootPanel = parentGroup.Root.RootPanel as LayoutPanel; root.RootPanel = panel; panel.Children.Add(oldRootPanel); panel.Children.Add(previousContainer); } break; } } else { //I'm about to remove parentGroup, redirect any content (ie hidden contents) that point to it //to previousContainer LayoutRoot root = parentGroup.Root as LayoutRoot; foreach (var cnt in root.Descendents().OfType<ILayoutPreviousContainer>().Where(c => c.PreviousContainer == parentGroup)) { cnt.PreviousContainer = previousContainer; } } foreach (var anchorableToToggle in parentGroup.Children.ToArray()) { previousContainer.Children.Add(anchorableToToggle); } parentSide.Children.Remove(parentGroup); } #endregion #region Anchorable is docked else if (Parent is LayoutAnchorablePane) { var root = Root; var parentPane = Parent as LayoutAnchorablePane; var newAnchorGroup = new LayoutAnchorGroup(); ((ILayoutPreviousContainer)newAnchorGroup).PreviousContainer = parentPane; foreach (var anchorableToImport in parentPane.Children.ToArray()) newAnchorGroup.Children.Add(anchorableToImport); //detect anchor side for the pane var anchorSide = parentPane.GetSide(); switch (anchorSide) { case AnchorSide.Right: root.RightSide.Children.Add(newAnchorGroup); break; case AnchorSide.Left: root.LeftSide.Children.Add(newAnchorGroup); break; case AnchorSide.Top: root.TopSide.Children.Add(newAnchorGroup); break; case AnchorSide.Bottom: root.BottomSide.Children.Add(newAnchorGroup); break; } } #endregion }
public bool BeforeInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableToShow, ILayoutContainer destinationContainer) { //AD wants to add the anchorable into destinationContainer //just for test provide a new anchorablepane //if the pane is floating let the manager go ahead LayoutAnchorablePane destPane = destinationContainer as LayoutAnchorablePane; if (destinationContainer != null && destinationContainer.FindParent <LayoutFloatingWindow>() != null) { return(false); } anchorableToShow.AutoHideWidth = 256; anchorableToShow.AutoHideHeight = 128; anchorableToShow.CanShowOnHover = false; if (anchorableToShow.Content is ExplorerViewModel) { var explorerPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "ExplorerPane"); if (explorerPane != null) { explorerPane.Children.Add(anchorableToShow); return(true); } } if (anchorableToShow.Content is PropertiesViewModel) { var propertiesPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "PropertiesPane"); if (propertiesPane != null) { propertiesPane.Children.Add(anchorableToShow); return(true); } } if (anchorableToShow.Content is OutputViewModel) { var outputPane = layout.Descendents().OfType <LayoutAnchorablePane>().FirstOrDefault(d => d.Name == "OutputPane"); if (outputPane != null) { outputPane.Children.Add(anchorableToShow); return(true); } } if (anchorableToShow.Content is ToolboxViewModel) { var leftGroup = new LayoutAnchorGroup(); leftGroup.Children.Add(anchorableToShow); layout.LeftSide.Children.Add(leftGroup); return(true); } if (anchorableToShow.Content is GitChangesViewModel) { var rightGroup = new LayoutAnchorGroup(); rightGroup.Children.Add(anchorableToShow); layout.RightSide.Children.Add(rightGroup); return(true); } if (anchorableToShow.Content is ErrorViewModel) { var bottomGroup = new LayoutAnchorGroup(); bottomGroup.Children.Add(anchorableToShow); layout.BottomSide.Children.Add(bottomGroup); return(true); } return(false); }