| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;namespace InABox.DynamicGrid{    public class DefaultDynamicEditorGridLayout : DynamicEditorGridLayout    {        public override bool TabStripVisible        {            get { return Details.TabStripVisible; }            set { Details.TabStripVisible = value; }        }        private DynamicTabControl Details;        private double PageWidth = 0;        private double PageHeight = 0;        public override double TotalWidth => PageWidth;        public override double TotalHeight => PageHeight;        public DefaultDynamicEditorGridLayout()        {            Details = new DynamicTabControl();            Details.VerticalAlignment = VerticalAlignment.Stretch;            Details.HorizontalAlignment = HorizontalAlignment.Stretch;            Details.Name = "Details";            Details.SelectionChanged += Details_SelectionChanged;            Content = Details;        }        public override void LoadPages(IEnumerable<IDynamicEditorPage> pages)        {            Details.Items.Clear();            foreach (var page in pages.OrderBy(x => x.PageType).ThenBy(x => x.Order).ThenBy(x => x.Caption()))            {                var tab = new DynamicTabItem();                tab.Header = page.Caption();                tab.Content = page;                Details.Items.Add(tab);                var minSize = page.MinimumSize();                PageWidth = Math.Max(PageWidth, minSize.Width);                PageHeight = Math.Max(PageHeight, minSize.Height);            }            Details.SelectedItem = Details.Items.Count > 0 ? Details.Items[0] : null;        }        private bool bChanging;        private void Details_SelectionChanged(object sender, SelectionChangedEventArgs e)        {            if (bChanging || Details?.SelectedItem == null || e.OriginalSource != Details)                return;            bChanging = true;            try            {                var tab = Details.SelectedItem as DynamicTabItem;                if (tab is not null && tab.Content is IDynamicEditorPage page)                {                    SelectPage(page);                }            }            finally            {                bChanging = false;            }        }    }}
 |