private void Item_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            MenuItem item = sender as MenuItem;

            switch (item.Header.ToString())
            {
            case "关闭":
                currentRadPane = RadPaneGroup.EnumeratePanes().Where(p => !p.IsHidden && p.IsSelected).FirstOrDefault();
                RadPaneGroup.RemovePane(currentRadPane);
                break;

            case "除此之外全部关闭":
                currentRadPane = RadPaneGroup.EnumeratePanes().Where(p => !p.IsHidden && p.IsSelected).FirstOrDefault();
                var panesToClose = RadPaneGroup.EnumeratePanes().Where(p => p != currentRadPane);
                for (int i = panesToClose.Count() - 1; i >= 0; i--)
                {
                    this.RadPaneGroup.RemovePane(panesToClose.ElementAt(i));
                }
                break;

            case "全部关闭":
                RadPaneGroup.Items.Clear();
                break;
            }
        }
예제 #2
0
        private RadPaneGroup GenerateRadPaneGroup(CreatedDockingGroup dockingGroup)
        {
            var radPaneGroup = new RadPaneGroup {
                Tag = dockingGroup,
            };

            if (dockingGroup.DockingGroupMetaData.NoStyle)
            {
                radPaneGroup.Template = NoStyleContainerTemplate;
            }
            ;

            foreach (var dockingPane in _mefDockingPanes)
            {
                if (dockingPane.DockingPaneMetaData.InitPaneGroupGUID != dockingGroup.DockingGroupMetaData.GUID)
                {
                    continue;
                }

                var radPane = GenericRadPane(dockingPane);
                radPaneGroup.AddItem(radPane, DockPosition.Center);
            }

            return(radPaneGroup);
        }
예제 #3
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"
            });
        }
예제 #4
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);
        }
예제 #5
0
        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);
        }
        private void ProjectExplorer_OpenDocument(Platform.Models.Projects.ProjectItemType type, string documentName, string documentPath)
        {
            var group = new RadPaneGroup();

            if (DocumentHost.Items.Count == 0)
            {
                DocumentHost.Items.Add(group);
            }
            else
            {
                group = DocumentHost.Items[0] as RadPaneGroup;
            }

            var documentPane = new RadDocumentPane()
            {
                Title = documentName
            };
            var documentControl = BootStrapper.Resolve <LayoutingDocumentControl>(new Parameter[] {
                new NamedParameter(nameof(type), type),
                new NamedParameter(nameof(documentPath), documentPath)
            });

            documentControl.ViewModel.ViewModelMouseDown += ViewModel_ViewModelMouseDown;

            documentPane.Content = documentControl;
            group.Items.Add(documentPane);

            if (_propertiesToolWindowControl != null)
            {
                _propertiesToolWindowControl.ViewModel.UpdateEditableViewModel(null);
            }
        }
예제 #7
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);
        }
        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);
        }
예제 #9
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();
 }
예제 #10
0
 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);
 }
예제 #11
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);
        }
예제 #12
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();
        }
예제 #13
0
 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);
 }
예제 #14
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);
        }
        public MainWindow(IMainViewModel viewModel)
        {
            InitializeComponent();

            DataContext = viewModel;

            var welcomeScreen = BootStrapper.Resolve <WelcomeScreenControl>();

            WelcomeControlContainer.Content = welcomeScreen;

            // LeftContainer
            var group = new RadPaneGroup();
            var projectExplorerPane = new RadPane();

            projectExplorerPane.Header = "Project Explorer";
            var projectExplorer = BootStrapper.Resolve <ProjectExplorerToolWindowControl>();

            projectExplorerPane.Content             = projectExplorer;
            projectExplorer.ViewModel.OpenDocument += ProjectExplorer_OpenDocument;
            group.Items.Add(projectExplorerPane);
            LeftContainer.Items.Add(group);

            // BottomContainer
            group = new RadPaneGroup();
            var outputPane = new RadPane();

            outputPane.Header  = "Output";
            outputPane.Content = BootStrapper.Resolve <OutputToolWindowControl>();
            group.Items.Add(outputPane);

            var errorPane = new RadPane();

            errorPane.Header = "Error List";
            group.Items.Add(errorPane);

            BottomContainer.Items.Add(group);

            // RightContainer
            group = new RadPaneGroup();
            var propertiesPane = new RadPane();

            propertiesPane.Header        = "Properties";
            _propertiesToolWindowControl = BootStrapper.Resolve <PropertiesToolWindowControl>();
            propertiesPane.Content       = _propertiesToolWindowControl;
            group.Items.Add(propertiesPane);
            RightContainer.Items.Add(group);
        }
예제 #16
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);
        }
예제 #17
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"
            });
        }
예제 #18
0
        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 OpenDesignerView()
 {
     currentRadPane = RadPaneGroup.EnumeratePanes().Where(p => p.Name == "DesignApplication").FirstOrDefault();
     if (currentRadPane != null)
     {
         currentRadPane.IsHidden   = false;
         currentRadPane.IsSelected = true;
         currentRadPane.Content    = new DesignerView();
     }
     else
     {
         radPane = new RadPane()
         {
             Header = "应用程序设计",
             Name   = "DesignApplication",
             ContextMenuTemplate = null,
             ContextMenu         = PaneContextMenu,
             Content             = new DesignerView(),
             IsSelected          = true
         };
         RadPaneGroup.Items.Add(radPane);
     }
 }
예제 #20
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);
        }
예제 #21
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"
            });
        }
예제 #22
0
 /// <summary>
 /// Sets the value of the ParentRadPaneGroup attached property
 /// for a given dependency object.
 /// </summary>
 /// <param name="obj">The object to which the property value
 /// is written.</param>
 /// <param name="value">Sets the ParentRadPaneGroup value of the specified object.</param>
 public static void SetParentRadPaneGroup(DependencyObject obj, RadPaneGroup value)
 {
     obj.SetValue(ParentRadPaneGroupProperty, value);
 }
예제 #23
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);
        }
예제 #24
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);
                    }
                }
            };
        }
        public void AddPane(string commandName)
        {
            currentRadPane = RadPaneGroup.EnumeratePanes().Where(p => p.Name == commandName).FirstOrDefault();

            if (currentRadPane != null)
            {
                currentRadPane.IsHidden   = false;
                currentRadPane.IsSelected = true;
                return;
            }
            else
            {
                switch (commandName)
                {
                case "AplicationManager":
                    radPane = new RadPane()
                    {
                        Header = "应用程序维护",
                        Name   = "AplicationManager",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new ApplicationManagerView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                case "AplicationModuleManager":
                    radPane = new RadPane()
                    {
                        Header = "应用程序模块维护",
                        Name   = "AplicationModuleManager",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new ApplicationModuleManagerView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                case "AplicationModuleRelation":
                    radPane = new RadPane()
                    {
                        Header = "应用程序模块关联",
                        Name   = "AplicationModuleRelation",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new ApplicationModuleRelationView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                case "NamespaceManager":
                    radPane = new RadPane()
                    {
                        Header = "命名空间维护",
                        Name   = "NamespaceManager",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new NameSpaceManagerView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                case "WorkflowDesinger":
                    radPane = new RadPane()
                    {
                        Header = "工作流设计",
                        Name   = "WorkflowDesinger",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new WorkflowDesignerView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                case "DesignApplication":
                    radPane = new RadPane()
                    {
                        Header = "应用程序设计",
                        Name   = "DesignApplication",
                        ContextMenuTemplate = null,
                        ContextMenu         = PaneContextMenu,
                        Content             = new DesignerView(),
                        IsSelected          = true
                    };
                    RadPaneGroup.Items.Add(radPane);
                    break;

                default:
                    break;
                }
            }
        }
예제 #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"
            });
        }