using Lattice.Layout.Abstractions; using Lattice.Layout.UI.WinUI.Controls; using Lattice.Layout.UI.WinUI.Docking; using Microsoft.UI.Xaml; using System.Collections.Generic; namespace Lattice.Layout.UI.WinUI.Visuals; /// /// Визуальное представление сплит-элемента для WinUI. /// Управляет жизненным циклом соответствующего . /// public sealed class WinUISplitVisual : LayoutVisual, IWinUIVisual { /// /// Реальный WinUI-контрол, отображающий сплит. /// public WinUISplitControl SplitControl { get; } /// /// Контрол, используемый рендерером и докингом. /// public FrameworkElement Control => SplitControl; /// /// Дочерние визуальные элементы. /// public IReadOnlyList Children { get; } public WinUISplitVisual(ILayoutSplit model, IReadOnlyList children) : base(model) { Children = children; SplitControl = new WinUISplitControl { LayoutOrientation = model.Orientation switch { Lattice.Layout.Abstractions.Orientation.Horizontal => Microsoft.UI.Xaml.Controls.Orientation.Horizontal, Lattice.Layout.Abstractions.Orientation.Vertical => Microsoft.UI.Xaml.Controls.Orientation.Vertical, _ => Microsoft.UI.Xaml.Controls.Orientation.Horizontal } }; } /// public override void Attach() { SplitControl.Children.Clear(); foreach (var child in Children) { child.Attach(); switch (child) { case WinUISplitVisual splitVisual: SplitControl.Children.Add(splitVisual.Control); break; case WinUIGroupVisual groupVisual: SplitControl.Children.Add(groupVisual.Control); break; case WinUIItemVisual itemVisual: SplitControl.Children.Add(itemVisual.Control); break; } } SplitControl.RebuildGrid(); } /// public override void Detach() { foreach (var child in Children) child.Detach(); SplitControl.Children.Clear(); } }