| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace InABox.DynamicGrid;/// <summary>/// Interaction logic for VerticalDynamicEditorGridLayout.xaml/// </summary>public partial class VerticalDynamicEditorGridLayout : DynamicEditorGridLayout{        public override bool TabStripVisible    {        get { return Editors.TabStripVisible; }        set { Editors.TabStripVisible = value; }    }    private double _totalWidth;    public override double TotalWidth => _totalWidth;    private double _editorHeight;    private double _pageHeight;    public override double TotalHeight => _editorHeight + _pageHeight;    public VerticalDynamicEditorGridLayout()    {        InitializeComponent();    }    public override void LoadPages(IEnumerable<IDynamicEditorPage> pages)    {        Editors.Items.Clear();        OtherPages.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();            if (page is FrameworkElement element)                element.Margin = new Thickness(0, 2, 0, 0);            tab.Content = page;            var minSize = page.MinimumSize();            if(page is DynamicEditorGrid.DynamicEditPage)            {                Editors.Items.Add(tab);                _editorHeight = Math.Max(_editorHeight, minSize.Height);                _totalWidth = Math.Max(_totalWidth, minSize.Width);            }            else            {                OtherPages.Items.Add(tab);                _pageHeight = Math.Max(_pageHeight, minSize.Height);            }        }        Editors.SelectedIndex = 0;    }    private bool bChanging;    private void Editors_SelectionChanged(object sender, SelectionChangedEventArgs e)    {        if (bChanging) return;        if ((e.OriginalSource != Editors && e.OriginalSource != OtherPages) || e.OriginalSource is not DynamicTabControl tabControl) return;        if (tabControl.SelectedItem is not DynamicTabItem tab) return;        bChanging = true;        try        {            if (tab is not null && tab.Content is IDynamicEditorPage page)            {                SelectPage(page);            }        }        finally        {            bChanging = false;        }    }    private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)    {        EditorRow.MaxHeight = e.NewSize.Height - 50;    }}
 |