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;
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        void RootVisual_ElementCleaning(object sender, LayoutSerializationEventArgs e)
        {
            var pane = e.AffectedElement as RadPane;

            if (pane != null)
            {
                _canUserCloseDictionary[RadDocking.GetSerializationTag(pane)] = pane.CanUserClose;
            }
        }
Beispiel #8
0
 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);
        }
Beispiel #10
0
        bool CanUserClose(RadPane pane)
        {
            bool canUserClose;

            try {
                var hasValue = _canUserCloseDictionary.TryGetValue(RadDocking.GetSerializationTag(pane), out canUserClose);
                return(!hasValue || canUserClose);
            } catch {
                return(true);
            }
        }
        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);
        }
Beispiel #12
0
 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;
         }
     }));
 }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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();
        }
Beispiel #15
0
        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()));
                }
            }
        }
Beispiel #20
0
        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));
        }
Beispiel #21
0
        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);
        }
Beispiel #22
0
        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);
        }
Beispiel #24
0
        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);
        }
Beispiel #25
0
        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"
            });
        }
Beispiel #26
0
        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"
            });
        }
Beispiel #27
0
 RadPane FindChartPaneByName(string charterName)
 {
     return(RootVisual.Panes.Where(p => RadDocking.GetSerializationTag(p) == charterName).FirstOrDefault());
 }
Beispiel #28
0
        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);
                    }
                }
            };
        }
Beispiel #29
0
 protected override RadPane GetPaneFromItem(RadDocking docking, object item) => getPaneFromItem(docking, item);
Beispiel #30
0
 protected override void AddPane(RadDocking dock, RadPane pane) => addPane(dock, pane);
Beispiel #31
0
        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);
        }