protected override void AddPane(RadDocking radDocking, RadPane pane) { if (!(pane.Tag is DockingPane paneTag)) { base.AddPane(radDocking, pane); return; } var paneGroup = radDocking.SplitItems. Where(p => p is RadPaneGroup). Cast <RadPaneGroup>(). FirstOrDefault(g => g.Tag is DockingPaneContainer groupTag && groupTag.GUID == paneTag.InitPaneGroupGUID ); if (paneGroup != null) { paneGroup.Items.Add(pane); } //否则便新建一个Container,group; else { base.AddPane(radDocking, pane); return; } }
private static void AddPaneForViewModel(RadDocking dock, WindowViewModel model, Size?floatingSize, Point?floatingLocation) { var pane = new RadPane { DataContext = model }; pane.SetBinding(RadPane.IsHiddenProperty, new Binding("IsHidden") { Mode = BindingMode.TwoWay }); pane.SetBinding(RadPane.HeaderProperty, new Binding("Header")); var group = new RadPaneGroup { Items = { pane } }; var splitContainer = new RadSplitContainer { Items = { group } }; splitContainer.InitialPosition = DockState.FloatingOnly; if (floatingSize.HasValue) { RadDocking.SetFloatingSize(splitContainer, floatingSize.Value); } if (floatingLocation.HasValue) { RadDocking.SetFloatingLocation(splitContainer, floatingLocation.Value); } dock.Items.Add(splitContainer); }
private void CreateNewOuterDocument(object param) { var tempInnerDockPanes = new ObservableCollection <RadPane>() { new RadPane() { Header = "Inner Pane", Tag = "DocumentHost" }, }; var radPaneGroup = new RadPaneGroup() { Name = "DocumentHostPane" + innerDockingNumber }; innerDockingNumber++; var radSplitContainer = new RadSplitContainer(); radSplitContainer.Items.Add(radPaneGroup); var tempInnerDock = new RadDocking() { DockingPanesFactory = new CustomDockingPanesFactory(), DocumentHost = radSplitContainer }; // Set correct PanesSource for hte inner RadDocking tempInnerDock.PanesSource = tempInnerDockPanes; this.OuterDockPanes.Add(new RadPane() { Header = "New Outer Pane " + Guid.NewGuid(), Content = tempInnerDock, Tag = "DocumentHost" }); }
private void AddPaneWithSerializationTagButtonClick(object sender, RoutedEventArgs e) { RadPane radPane = new RadPane() { Title = "New RadPane with SerializationTag", Name = "NewRadPane" }; radPane.Content = new TextBox() { Text = "TextBox" }; RadDocking.SetSerializationTag(radPane, "NewRadPane"); RadPaneGroup radPaneGroup = new RadPaneGroup(); RadSplitContainer radSplitContainer = new RadSplitContainer() { InitialPosition = DockState.FloatingDockable }; RadDocking.SetFloatingLocation(radSplitContainer, new Point(700, 130)); RadDocking.SetFloatingSize(radSplitContainer, new Size(500, 200)); radPaneGroup.Items.Add(radPane); radSplitContainer.Items.Add(radPaneGroup); this.Docking.Items.Add(radSplitContainer); DisableButton(sender); }
protected override RadPane CreatePaneForItem(object item) { var viewModel = item as IPaneViewModel; if (viewModel != null) { RadPane pane; if (viewModel.IsDocument) { pane = new RadDocumentPane(); } else { pane = new RadPane(); pane.Width = 600; } pane.DataContext = item; pane.SetValue(View.IsGeneratedProperty, true); RadDocking.SetSerializationTag(pane, viewModel.Header); pane.Content = ViewLocator.LocateForModel(viewModel, null, null); ViewModelBinder.Bind(viewModel, pane, null); viewModel.IsPaneActive = true; viewModel.IsSelected = true; return(pane); } return(base.CreatePaneForItem(item)); }
protected override void AddPane(RadDocking radDocking, RadPane pane) { var paneModel = pane.DataContext as PaneViewModel; if (paneModel != null && !(paneModel.IsDocument)) { RadPaneGroup group = null; switch (paneModel.InitialPosition) { case DockState.DockedRight: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "rightGroup") as RadPaneGroup; if (group != null) { group.Items.Add(pane); } return; case DockState.DockedBottom: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "bottomGroup") as RadPaneGroup; if (group != null) { group.Items.Add(pane); } return; case DockState.DockedLeft: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "leftGroup") as RadPaneGroup; if (group != null) { group.Items.Add(pane); } return; case DockState.FloatingDockable: var fdSplitContainer = radDocking.GeneratedItemsFactory.CreateSplitContainer(); group = radDocking.GeneratedItemsFactory.CreatePaneGroup(); fdSplitContainer.Items.Add(group); group.Items.Add(pane); radDocking.Items.Add(fdSplitContainer); pane.MakeFloatingDockable(); return; case DockState.FloatingOnly: var foSplitContainer = radDocking.GeneratedItemsFactory.CreateSplitContainer(); group = radDocking.GeneratedItemsFactory.CreatePaneGroup(); foSplitContainer.Items.Add(group); group.Items.Add(pane); radDocking.Items.Add(foSplitContainer); pane.MakeFloatingOnly(); return; case DockState.DockedTop: default: return; } } base.AddPane(radDocking, pane); }
void RootVisual_ElementCleaning(object sender, LayoutSerializationEventArgs e) { var pane = e.AffectedElement as RadPane; if (pane != null) { _canUserCloseDictionary[RadDocking.GetSerializationTag(pane)] = pane.CanUserClose; } }
void AddCharterToHidden(RadPane pane) { if (pane != null) { _hiddenCharters.Where(p => RadDocking.GetSerializationTag(p) == RadDocking.GetSerializationTag(pane)) .ToList().ForEach(p => _hiddenCharters.Remove(p)); _hiddenCharters.Add(pane); } }
protected override void AddPane(RadDocking radDocking, RadPane pane) { var paneViewModel = pane.DataContext as DetectivePaneViewModelBase; if (paneViewModel != null) { radDocking.PaneStateChange += this.RadDocking_PaneStateChange; RadPaneGroup group = null; switch (paneViewModel.DockPositionPosition) { case DetectiveDockPosition.DockedDocument: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "DockedDocument") as RadPaneGroup; @group?.Items.Add(pane); return; case DetectiveDockPosition.DockedRight: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "DockedRight") as RadPaneGroup; @group?.Items.Add(pane); return; case DetectiveDockPosition.DockedBottom: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "DockedBottom") as RadPaneGroup; @group?.Items.Add(pane); return; case DetectiveDockPosition.DockedLeft: group = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == "DockedLeft") as RadPaneGroup; @group?.Items.Add(pane); return; case DetectiveDockPosition.FloatingDockable: var fdSplitContainer = radDocking.GeneratedItemsFactory.CreateSplitContainer(); group = radDocking.GeneratedItemsFactory.CreatePaneGroup(); fdSplitContainer.Items.Add(group); group.Items.Add(pane); radDocking.Items.Add(fdSplitContainer); pane.MakeFloatingDockable(); return; case DetectiveDockPosition.FloatingOnly: var foSplitContainer = radDocking.GeneratedItemsFactory.CreateSplitContainer(); group = radDocking.GeneratedItemsFactory.CreatePaneGroup(); foSplitContainer.Items.Add(group); group.Items.Add(pane); radDocking.Items.Add(foSplitContainer); pane.MakeFloatingOnly(); return; case DetectiveDockPosition.DockedTop: default: return; } } base.AddPane(radDocking, pane); }
bool CanUserClose(RadPane pane) { bool canUserClose; try { var hasValue = _canUserCloseDictionary.TryGetValue(RadDocking.GetSerializationTag(pane), out canUserClose); return(!hasValue || canUserClose); } catch { return(true); } }
public void RemoveCharter(CharterControl charter) { Dispatcher.BeginInvoke(new Action(() => { var pane = FindChartPaneByName(charter.Name); if (pane != null) { pane.RemoveFromParent(); pane.IsHidden = true; RadDocking.SetSerializationTag(pane, ""); pane.Content = null; } })); }
private void AddButton_Click(object sender, RoutedEventArgs e) { var split = new RadSplitContainer(); var group = new RadPaneGroup(); var pane = new RadPane(); group.Items.Add(pane); split.Items.Add(group); split.InitialPosition = Telerik.Windows.Controls.Docking.DockState.DockedTop; RadDocking.SetIsAutoGenerated(group, true); RadDocking.SetIsAutoGenerated(split, true); this.docking.Items.Add(split); }
private void ButtonFloating_Click(object sender, RoutedEventArgs e) { var splitContainer = new RadSplitContainer(); var paneGroup = new RadPaneGroup(); var pane = new RadPane { Header = "Floating pane" }; RadDocking.SetFloatingLocation(pane, new Point(100, 100)); paneGroup.Items.Add(pane); splitContainer.Items.Add(paneGroup); dock.Items.Add(splitContainer); pane.MakeFloatingDockable(); }
private PanelInstance CreatePanelInstance(PanelName name, Dictionary <string, object> args) { //logger.LogDebug($"CreatePanelInstance - name: {name}"); log.Trace($"{nameof(CreatePanelInstance)}({nameof(name)}: {name}, {nameof(args)}: {args})"); var descriptor = panelDescritors.Single(p => p.Name.Name == name.Name); var view = serviceProvider.GetService(descriptor.ViewType); if (!(view is FrameworkElement)) { throw new ArgumentException($"The '{nameof(descriptor.ViewType)}' must be '{nameof(FrameworkElement)}'"); } var radPane = new RadPane { Content = view, IsPinned = descriptor.IsPinned }; IPanel panel; if (view is IPanel pa) { panel = pa; } else if (view is IPanelView vi) { panel = vi.Panel; } else { throw new NotSupportedException($"The '{nameof(descriptor.ViewType)}' must be '{nameof(IPanel)}' or '{nameof(IPanelView)}'"); } var panelInstance = new PanelInstance(string.IsNullOrWhiteSpace(descriptor.Name.Key) ? new GenericPanelDescriptor(name.ToString(), descriptor.ViewType, descriptor.DefaultPosition, descriptor.RemoveOnHide, descriptor.IsPinned) : descriptor, panel, (FrameworkElement)view, radPane); panelInstances.Add(panelInstance); radPane.SetBinding(RadPane.TitleProperty, new Binding(nameof(panel.Title)) { Source = panel }); radPane.SetBinding(RadPane.HeaderProperty, new Binding(nameof(panel.Header)) { Source = panel }); RadDocking.SetSerializationTag(radPane, name.ToString()); if (panel is IInitializablePanel iniPanel) { iniPanel.Initialize(name, args); } return(panelInstance); }
protected override RadPane CreatePaneForItem(object item) { var viewModel = item as DetectivePaneViewModelBase; Debug.Assert(viewModel != null, "viewModel != null"); var pane = new DetectivePane { DataContext = viewModel }; RadDocking.SetSerializationTag(pane, viewModel.HeaderText); Debug.Assert(viewModel.View != null, "viewModel.View != null"); pane.Content = viewModel.View; return(pane); }
protected override Telerik.Windows.Controls.RadPane CreatePaneForItem(object item) { var viewModel = item as PaneViewModel; if (viewModel != null) { var pane = new RadPane(); pane.DataContext = item; pane.Header = viewModel.HeaderText; RadDocking.SetSerializationTag(pane, viewModel.SerializationTag); return(pane); } return(base.CreatePaneForItem(item)); }
private void Docking_ElementLayoutSaving(object sender, Telerik.Windows.Controls.LayoutSerializationSavingEventArgs e) { var splitContainer = e.AffectedElement as RadSplitContainer; var paneGroup = e.AffectedElement as RadPaneGroup; var pane = e.AffectedElement as RadPane; if (this.rightScope != null && this.rightScope.IsActive) { if (splitContainer != null && (RadDocking.GetDockState(splitContainer) != Telerik.Windows.Controls.Docking.DockState.DockedRight || splitContainer.IsInDocumentHost || splitContainer.IsInToolWindow)) { e.Cancel = true; } if (pane != null) { var parentSplitContainer = pane.ParentOfType <RadSplitContainer>(); if (parentSplitContainer != null && RadDocking.GetDockState(parentSplitContainer) == Telerik.Windows.Controls.Docking.DockState.DockedRight && !parentSplitContainer.IsInDocumentHost && !parentSplitContainer.IsInToolWindow) { this.ignoredRightPanesSerializationTagsWhenCleaning.Add(e.AffectedElementSerializationTag); } else { e.Cancel = true; } } } else if (this.leftScope != null && this.leftScope.IsActive) { if (splitContainer != null && (RadDocking.GetDockState(splitContainer) != Telerik.Windows.Controls.Docking.DockState.DockedLeft || splitContainer.IsInDocumentHost || splitContainer.IsInToolWindow)) { e.Cancel = true; } if (pane != null) { var parentSplitContainer = pane.ParentOfType <RadSplitContainer>(); if (parentSplitContainer != null && RadDocking.GetDockState(parentSplitContainer) == Telerik.Windows.Controls.Docking.DockState.DockedLeft && !parentSplitContainer.IsInDocumentHost && !parentSplitContainer.IsInToolWindow) { this.ignoredLeftPanesSerializationTagsWhenCleaning.Add(e.AffectedElementSerializationTag); } else { e.Cancel = true; } } } }
private void GetCorrectDockState(Telerik.Windows.Controls.RadPane radPane) { var splitContainer = radPane.ParentOfType <RadSplitContainer>(); if (splitContainer != null) { var dockState = RadDocking.GetDockState(splitContainer); if (radPane.IsInDocumentHost) { MessageBox.Show(string.Format("The '{0}' is in the DocumentHost", radPane.Header)); } else { MessageBox.Show(string.Format("The DockState of '{0}' is '{1}'", radPane.Header, dockState.ToString())); } } }
protected override RadPane CreatePaneForItem(object item) { var viewModel = item as PaneViewModel; if (viewModel != null) { var pane = viewModel.IsDocument ? new RadDocumentPane() : new RadPane(); pane.DataContext = item; RadDocking.SetSerializationTag(pane, viewModel.Header); if (viewModel.ContentType != null) { pane.Content = Activator.CreateInstance(viewModel.ContentType); } return(pane); } return(base.CreatePaneForItem(item)); }
private static void AddPaneForViewModel(RadDocking dock, WindowViewModel model, Size? floatingSize, Point? floatingLocation) { var pane = new RadPane { DataContext = model }; pane.SetBinding(RadPane.IsHiddenProperty, new Binding("IsHidden") { Mode = BindingMode.TwoWay }); pane.SetBinding(RadPane.HeaderProperty, new Binding("Header")); var group = new RadPaneGroup { Items = { pane } }; var splitContainer = new RadSplitContainer { Items = { group } }; splitContainer.InitialPosition = DockState.FloatingOnly; if (floatingSize.HasValue) { RadDocking.SetFloatingSize(splitContainer, floatingSize.Value); } if (floatingLocation.HasValue) { RadDocking.SetFloatingLocation(splitContainer, floatingLocation.Value); } dock.Items.Add(splitContainer); }
public ViewModel() { this.OuterDockPanes = new ObservableCollection <RadPane>(); this.InnerDockPanes1 = new ObservableCollection <RadPane>() { new RadPane() { Header = "Inner Pane 1", Tag = "DocumentHost" }, new RadPane() { Header = "Inner Pane 2", Tag = "DocumentHost" }, new RadPane() { Header = "Inner Pane 3", Tag = "DocumentHost" } }; var radPaneGroup = new RadPaneGroup() { Name = "InnerDocumentHostPane" + innerDockingNumber }; innerDockingNumber++; var radSplitContainer = new RadSplitContainer(); radSplitContainer.Items.Add(radPaneGroup); var tempInnerDock = new RadDocking() { DockingPanesFactory = new CustomDockingPanesFactory(), DocumentHost = radSplitContainer }; // Set correct PanesSource for hte inner RadDocking tempInnerDock.PanesSource = this.InnerDockPanes1; this.OuterDockPanes.Add(new RadPane() { Header = "Outer Pane 1", Content = tempInnerDock, Tag = "DocumentHost" }); }
private void AddPaneButtonClick(object sender, RoutedEventArgs e) { RadPane radPane = new RadPane() { Title = "New sample RadPane" }; radPane.Content = new TextBox() { Text = "TextBox" }; RadPaneGroup radPaneGroup = new RadPaneGroup(); RadSplitContainer radSplitContainer = new RadSplitContainer() { InitialPosition = DockState.FloatingDockable }; RadDocking.SetFloatingLocation(radSplitContainer, new Point(400, 400)); RadDocking.SetFloatingSize(radSplitContainer, new Size(200, 100)); radPaneGroup.Items.Add(radPane); radSplitContainer.Items.Add(radPaneGroup); this.Docking.Items.Add(radSplitContainer); }
public void AddCharter(CharterControl charter) { var pane = FindChartPaneByName(charter.Name); var createPane = pane == null; if (pane == null) { pane = new RadPane(); RadDocking.SetSerializationTag(pane, charter.Name); } pane.IsHidden = false; pane.Content = charter; var b = new Binding() { Path = new PropertyPath("IsHidden"), Source = pane, Mode = BindingMode.TwoWay }; charter.SetBinding(CharterControl.IsParentHiddenProperty, b); SetCharterPaneBindings(pane); var ht = FindResource("CharterHeaderTemplate") as DataTemplate; pane.HeaderTemplate = ht; pane.TitleTemplate = ht; createPane = pane.GetParent <RadSplitContainer>() == null; if (createPane) { var chartsSplitter = FindChartsSplitter(); var paneGroup = chartsSplitter.ChildrenOfType <RadPaneGroup>().LastOrDefault(); if (paneGroup == null) { paneGroup = new RadPaneGroup(); chartsSplitter.Items.Add(paneGroup); } paneGroup.AddItem(pane, Telerik.Windows.Controls.Docking.DockPosition.Right); } AddCharterToHidden(pane); }
public ViewModel() { this.OuterDockPanes = new ObservableCollection<RadPane>(); this.InnerDockPanes1 = new ObservableCollection<RadPane>() { new RadPane() { Header = "Inner Pane 1", Tag = "DocumentHost" }, new RadPane() { Header = "Inner Pane 2", Tag = "DocumentHost" }, new RadPane() { Header = "Inner Pane 3", Tag = "DocumentHost" } }; var radPaneGroup = new RadPaneGroup() { Name = "InnerDocumentHostPane" + innerDockingNumber }; innerDockingNumber++; var radSplitContainer = new RadSplitContainer(); radSplitContainer.Items.Add(radPaneGroup); var tempInnerDock = new RadDocking() { DockingPanesFactory = new CustomDockingPanesFactory(), DocumentHost = radSplitContainer }; // Set correct PanesSource for hte inner RadDocking tempInnerDock.PanesSource = this.InnerDockPanes1; this.OuterDockPanes.Add(new RadPane() { Header = "Outer Pane 1", Content = tempInnerDock, Tag = "DocumentHost" }); }
private void CreateNewOuterDocument(object param) { var tempInnerDockPanes = new ObservableCollection<RadPane>() { new RadPane() { Header = "Inner Pane", Tag = "DocumentHost" }, }; var radPaneGroup = new RadPaneGroup() { Name = "DocumentHostPane" + innerDockingNumber }; innerDockingNumber++; var radSplitContainer = new RadSplitContainer(); radSplitContainer.Items.Add(radPaneGroup); var tempInnerDock = new RadDocking() { DockingPanesFactory = new CustomDockingPanesFactory(), DocumentHost = radSplitContainer }; // Set correct PanesSource for hte inner RadDocking tempInnerDock.PanesSource = tempInnerDockPanes; this.OuterDockPanes.Add(new RadPane() { Header = "New Outer Pane " + Guid.NewGuid(), Content = tempInnerDock, Tag = "DocumentHost" }); }
RadPane FindChartPaneByName(string charterName) { return(RootVisual.Panes.Where(p => RadDocking.GetSerializationTag(p) == charterName).FirstOrDefault()); }
public void AttachDocking(RadDocking docking) { //using var scope = logger.BeginScope(nameof(AttachDocking)); log.Trace(nameof(AttachDocking)); //logger.LogDebug("AttachDocking"); //using (logger.BeginScope("OtroScope")) //{ try { GenerateException(); } catch (Exception ex) { //logger.LogError(new EventId(123, "Evento de prueba"), ex, "Mensaje de prueba", "Argumento de prueba", PanelName.Parse("Nombre@Key")); log.Error("Mensaje de prueba", ex); } //} if (this.docking != null) { throw new InvalidOperationException($"Only one RadDocking can be attached"); } this.docking = docking; void AttachPane(PanelPosition state) { var split = new RadSplitContainer { InitialPosition = (DockState)(int)state }; //var pane = new RadPaneGroup { Tag = state, TabStripPlacement = Dock.Top }; var pane = new RadPaneGroup { Tag = state }; RadDocking.SetSerializationTag(pane, state.ToString()); split.Items.Add(pane); docking.Items.Add(split); } AttachPane(PanelPosition.DockedTop); AttachPane(PanelPosition.DockedBottom); AttachPane(PanelPosition.DockedLeft); AttachPane(PanelPosition.DockedRight); var sp = new RadSplitContainer(); var gr = new RadPaneGroup { Tag = PanelPosition.Document, TabStripPlacement = Dock.Left }; RadDocking.SetSerializationTag(gr, PanelPosition.Document.ToString()); sp.Items.Add(gr); docking.DocumentHost = sp; docking.DockingPanesFactory = new ShellDockingPanesFactory((dock, radPane) => { //logger.LogDebug("AddPane"); log.Trace($"{nameof(docking)}.{nameof(docking.DockingPanesFactory)}.AddPane"); IPanelDescriptor descriptor; if (radPane.Content is IPanel panel) { descriptor = panelInstances.Single(i => i.Panel == panel).Descriptor; } else if (radPane.Content is IPanelView view) { descriptor = panelInstances.Single(i => i.Panel == view.Panel).Descriptor; } else { throw new NotSupportedException($"The '{nameof(RadPane)}.{nameof(radPane.Content)}' must be '{nameof(IPanel)}' or '{nameof(IPanelView)}'"); } PositionPanel(radPane, descriptor.DefaultPosition); }, (dock, item) => item is RadPane radPane ? radPane : null); docking.ElementLoading += (_, e) => { //logger.LogDebug($"Dock_ElementLoading - AffectedElementSerializationTag: '{e.AffectedElementSerializationTag}'"); log.Trace($"{nameof(docking)}.{nameof(docking.ElementLoading)} - {nameof(e.AffectedElementSerializationTag)}: {e.AffectedElementSerializationTag}"); try { var name = PanelName.Parse(e.AffectedElementSerializationTag); if (panelDescritors.Any(p => p.Name.Name == name.Name)) { // Element is a known panel e.SetAffectedElement(CreatePanelInstance(name, e.ElementProperties.ToDictionary(p => p.Key, p => (object)p.Value)).RadPane); } else if (Enum.GetNames(typeof(PanelPosition)).Contains(e.AffectedElementSerializationTag) && e.AffectedElement is RadPaneGroup pane) { // Element is a main structural group panel pane.Tag = Enum.Parse(typeof(PanelPosition), e.AffectedElementSerializationTag); } else { // Element is unknown e.Cancel = true; } } catch (Exception ex) { //logger.LogError($"ERROR loading '{e.AffectedElementSerializationTag}'", ex); log.Error($"ERROR loading '{e.AffectedElementSerializationTag}'", ex); } }; docking.ElementLoaded += (_, e) => { //logger.LogDebug($"Dock_ElementLoaded - AffectedElementSerializationTag: '{e.AffectedElementSerializationTag}'"); log.Trace($"{nameof(docking)}.{nameof(docking.ElementLoaded)} - {nameof(e.AffectedElementSerializationTag)}: {e.AffectedElementSerializationTag}"); if (e.AffectedElement is RadPane radPane) { IPanel panel; if (radPane.Content is IPanel pa) { panel = pa; } else if (radPane.Content is IPanelView vi) { panel = vi.Panel; } else { throw new NotSupportedException($"Must be '{nameof(IPanel)}' or '{nameof(IPanelView)}'"); } radPane.SetBinding(RadPane.TitleProperty, new Binding(nameof(panel.Title)) { Source = panel }); radPane.SetBinding(RadPane.HeaderProperty, new Binding(nameof(panel.Header)) { Source = panel }); } }; docking.ElementLayoutSaving += (_, e) => { //logger.LogDebug($"Dock_ElementLayoutSaving '{e.AffectedElementSerializationTag}'"); log.Trace($"{nameof(docking)}.{nameof(docking.ElementLayoutSaving)} - {nameof(e.AffectedElementSerializationTag)}: {e.AffectedElementSerializationTag}"); if (e.ElementProperties.ContainsKey("IsHidden") && e.ElementProperties["IsHidden"] == "True") { e.Cancel = true; } }; docking.Close += (s, e) => { log.Trace($"{nameof(docking)}.{nameof(docking.Close)}"); foreach (var radPane in e.Panes) { var panelInstance = panelInstances.Single(i => i.View == radPane.Content); if (panelInstance.Descriptor.RemoveOnHide) { panelInstance.RadPane.RemoveFromParent(); panelInstances.Remove(panelInstance); } } }; }
protected override RadPane GetPaneFromItem(RadDocking docking, object item) => getPaneFromItem(docking, item);
protected override void AddPane(RadDocking dock, RadPane pane) => addPane(dock, pane);
protected override void AddPane(RadDocking radDocking, RadPane pane) { if (!(pane.Tag is IDockingPane dockingPane)) { base.AddPane(radDocking, pane); return; } IDockingPaneGroup paneGroup = null; IDockingPaneContainer paneContainer = null; RadSplitContainer paneContainerControl = null; RadPaneGroup paneGroupControl = null; //寻找DockGroup是否已经存在; paneGroupControl = radDocking.SplitItems. Where(p => p is RadPaneGroup). Cast <RadPaneGroup>(). FirstOrDefault(g => g.Tag is IDockingPaneGroup group && group.GUID == dockingPane.InitPaneGroupGUID ); //若存在,直接加入新的Pane; if (paneGroupControl != null) { paneGroupControl.Items.Add(pane); return; } //否则便新建一个group; paneGroup = _dockingService.DockingPaneGroups.FirstOrDefault(p => p.GUID == dockingPane.InitPaneGroupGUID); paneGroupControl = new RadPaneGroup { Tag = paneGroup }; paneGroupControl.Items.Add(pane); if (paneGroup == null) { LoggerService.WriteCallerLine($"{nameof(paneGroup)} can't be null."); return; } //查询Container是否存在; paneContainer = _dockingService.DockingContainers.FirstOrDefault(p => p.GUID == paneGroup.ContainerGUID); if (paneContainer == null) { LoggerService.WriteCallerLine($"{nameof(paneContainer)} can't be null."); return; } paneContainerControl = radDocking.SplitContainers.FirstOrDefault(p => p.Tag is IDockingPaneContainer container && container.GUID == paneContainer.GUID); if (paneContainerControl != null) { paneContainerControl.Items.Add(paneGroupControl); } paneContainerControl = new RadSplitContainer { InitialPosition = FromDockingPositionToDockState(paneContainer.InitDockingPosition) }; if (paneGroup.NoStyle) { paneGroupControl.Template = NoStyleContainerTemplate; } paneContainerControl.Tag = paneContainer; paneContainerControl.Items.Add(paneGroupControl); radDocking.Items.Add(paneContainerControl); }