You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							187 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
	
	
							187 lines
						
					
					
						
							7.1 KiB
						
					
					
				using KGIS.Framework.Views; | 
						|
using Kingo.PluginServiceInterface; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Drawing; | 
						|
using System.Linq; | 
						|
using System.Text; | 
						|
using System.Threading.Tasks; | 
						|
using System.Windows; | 
						|
using System.Windows.Controls; | 
						|
 | 
						|
namespace Kingo.PlatformPlugin.Services | 
						|
{ | 
						|
    public class DockViewService : IDockViewService | 
						|
    { | 
						|
        private IDockPanel2 _DockPanel { get; set; } | 
						|
        private List<IElementInfo> _Elements = new List<IElementInfo>(); | 
						|
        public List<IElementInfo> Elements => _Elements; | 
						|
 | 
						|
        public EnumOrientation Orientation { get; set; } | 
						|
        public bool IsShowSaveButton { get; set; } | 
						|
        public Action<string> Callback { get; set; } | 
						|
 | 
						|
        public void AddElement(IElementInfo obj) | 
						|
        { | 
						|
 | 
						|
            if (_DockPanel == null) | 
						|
                throw new Exception("视图未初始化,调用AddElements函数前,请先调用InitView函数进行初始化视图"); | 
						|
            try | 
						|
            { | 
						|
                _Elements.Add(obj); | 
						|
                _Elements = _Elements.OrderBy(e => e.ShowIndex).ToList(); | 
						|
                Grid grid2 = (_DockPanel as System.Windows.Controls.UserControl).Content as Grid; | 
						|
                Grid grid = null; | 
						|
                Grid btnGrid = null; | 
						|
                foreach (var item in grid2.Children) | 
						|
                { | 
						|
                    if (item is Grid) | 
						|
                    { | 
						|
                        if ((item as Grid).Name == "ContentPanel") | 
						|
                            grid = item as Grid; | 
						|
                        if ((item as Grid).Name == "btnPanel") | 
						|
                            btnGrid = item as Grid; | 
						|
 | 
						|
                    } | 
						|
                } | 
						|
                if (!IsShowSaveButton && btnGrid != null) | 
						|
                { | 
						|
                    btnGrid.Visibility = Visibility.Collapsed; | 
						|
                } | 
						|
                if (grid == null) | 
						|
                    return; | 
						|
                grid.Children.Clear(); | 
						|
                grid.RowDefinitions.Clear(); | 
						|
                grid.ColumnDefinitions.Clear(); | 
						|
                int count = _Elements.Count; | 
						|
                foreach (var item in _Elements) | 
						|
                { | 
						|
                    if ((item as UserControl).Parent != null) | 
						|
                    { | 
						|
                        if (((item as UserControl).Parent as Grid) != null) | 
						|
                            ((item as UserControl).Parent as Grid).Children.Clear(); | 
						|
                        //(item as UserControl).Parent.SetValue(ContentPresenter.ContentProperty, null); | 
						|
                    } | 
						|
                    //grid.Children.Remove(item as UIElement); | 
						|
                    grid.Children.Add(item as UIElement); | 
						|
                    item.IsShow = true; | 
						|
                    if (Orientation == EnumOrientation.Vertical) | 
						|
                    { | 
						|
                        grid.RowDefinitions.Add(new RowDefinition()); | 
						|
                        if (item.DockHeight > 0) | 
						|
                            grid.RowDefinitions[grid.RowDefinitions.Count - 1].Height = new GridLength(item.DockHeight); | 
						|
                        if (item.ResetSize || _Elements.Count > 1) | 
						|
                        { | 
						|
                            grid.Children[grid.Children.Count - 1].SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1); | 
						|
                            GridSplitter split = new GridSplitter(); | 
						|
                            split.VerticalAlignment = VerticalAlignment.Bottom; | 
						|
                            split.HorizontalAlignment = HorizontalAlignment.Stretch; | 
						|
                            split.Height = 5; | 
						|
                            split.SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1); | 
						|
                            grid.Children.Add(split); | 
						|
                        } | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        grid.ColumnDefinitions.Add(new ColumnDefinition()); | 
						|
                        if (item.DockWidth > 0) | 
						|
                            grid.ColumnDefinitions[grid.ColumnDefinitions.Count - 1].Width = new GridLength(item.DockWidth); | 
						|
                        if (item.ResetSize || _Elements.Count > 1) | 
						|
                        { | 
						|
                            grid.Children[grid.Children.Count - 1].SetValue(Grid.ColumnProperty, grid.ColumnDefinitions.Count - 1); | 
						|
                            GridSplitter split = new GridSplitter(); | 
						|
                            split.VerticalAlignment = VerticalAlignment.Stretch; | 
						|
                            split.HorizontalAlignment = HorizontalAlignment.Right; | 
						|
                            split.Width = 5; | 
						|
                            grid.Children.Add(split); | 
						|
                        } | 
						|
                    } | 
						|
                } | 
						|
                grid.UpdateLayout(); | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public IDockPanel2 InitView() | 
						|
        { | 
						|
            if (_DockPanel == null) | 
						|
            { | 
						|
                View.DefaultDockView _view = new View.DefaultDockView(); | 
						|
                _view.BtnCallBack += (s) => | 
						|
                { | 
						|
                    if (s == "SaveEdit") | 
						|
                    { | 
						|
                        Save(); | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        Save(); | 
						|
                        Callback?.Invoke(s); | 
						|
                    } | 
						|
                }; | 
						|
                _DockPanel = _view; | 
						|
                _DockPanel.CloseViewHandler += (s, a) => | 
						|
                { | 
						|
                    Grid grid2 = (_DockPanel as System.Windows.Controls.UserControl).Content as Grid; | 
						|
                    Grid grid = null; | 
						|
                    Grid btnGrid = null; | 
						|
                    foreach (var item in grid2.Children) | 
						|
                    { | 
						|
                        if (item is Grid) | 
						|
                        { | 
						|
                            if ((item as Grid).Name == "ContentPanel") | 
						|
                                grid = item as Grid; | 
						|
                            if ((item as Grid).Name == "btnPanel") | 
						|
                                btnGrid = item as Grid; | 
						|
 | 
						|
                        } | 
						|
                    } | 
						|
                    if (grid == null) | 
						|
                        return; | 
						|
                    grid.Children.Clear(); | 
						|
                    grid.RowDefinitions.Clear(); | 
						|
                    grid.ColumnDefinitions.Clear(); | 
						|
 | 
						|
                    _DockPanel = null; | 
						|
                }; | 
						|
            } | 
						|
            _Elements.Clear(); | 
						|
            return _DockPanel; | 
						|
        } | 
						|
        public void Save() | 
						|
        { | 
						|
            try | 
						|
            { | 
						|
                foreach (var item in _Elements) | 
						|
                { | 
						|
                    item.SaveEdit(); | 
						|
                } | 
						|
            } | 
						|
            catch (Exception ex) | 
						|
            { | 
						|
                throw ex; | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public void RemoveElement(IElementInfo obj) | 
						|
        { | 
						|
            int idx = _Elements.IndexOf(obj); | 
						|
            if (idx > -1) | 
						|
            { | 
						|
                _Elements.RemoveAt(idx); | 
						|
                if (_DockPanel != null) | 
						|
                { | 
						|
                    Grid grid = (_DockPanel as System.Windows.Controls.UserControl).Content as Grid; | 
						|
                    idx = grid.Children.IndexOf(obj as UIElement); | 
						|
                    if (idx > -1) | 
						|
                    { | 
						|
                        grid.Children.RemoveAt(idx); | 
						|
                    } | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
    } | 
						|
}
 | 
						|
 |