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();
}
}