82 lines
2.5 KiB
C#
82 lines
2.5 KiB
C#
using Lattice.Layout.Abstractions;
|
|
using Lattice.Layout.UI.WinUI.Controls;
|
|
using Lattice.Layout.UI.WinUI.Docking;
|
|
using Microsoft.UI.Xaml;
|
|
using Microsoft.UI.Xaml.Controls;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Lattice.Layout.UI.WinUI.Visuals;
|
|
|
|
/// <summary>
|
|
/// Визуальное представление группы вкладок для WinUI.
|
|
/// Управляет <see cref="WinUIGroupControl"/> и вкладками <see cref="TabViewItem"/>.
|
|
/// </summary>
|
|
public sealed class WinUIGroupVisual : LayoutVisual, IWinUIVisual
|
|
{
|
|
/// <summary>
|
|
/// Реальный WinUI-контрол группы вкладок.
|
|
/// </summary>
|
|
public WinUIGroupControl GroupControl { get; }
|
|
|
|
/// <summary>
|
|
/// Контрол, используемый докингом и рендерером.
|
|
/// </summary>
|
|
public FrameworkElement Control => GroupControl;
|
|
|
|
/// <summary>
|
|
/// Визуальные элементы вкладок.
|
|
/// </summary>
|
|
public IReadOnlyList<ILayoutVisual> Items { get; }
|
|
|
|
public WinUIGroupVisual(ILayoutGroup model, IReadOnlyList<ILayoutVisual> items)
|
|
: base(model)
|
|
{
|
|
Items = items;
|
|
GroupControl = new WinUIGroupControl();
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void Attach()
|
|
{
|
|
// Полная очистка
|
|
GroupControl.TabView.TabItems.Clear();
|
|
|
|
foreach (var visual in Items)
|
|
{
|
|
visual.Attach();
|
|
|
|
if (visual is WinUIItemVisual itemVisual)
|
|
{
|
|
var tab = new TabViewItem
|
|
{
|
|
Header = itemVisual.Header,
|
|
Content = itemVisual.Control // безопасно, т.к. Control — UserControl
|
|
};
|
|
|
|
GroupControl.TabView.TabItems.Add(tab);
|
|
}
|
|
}
|
|
|
|
// Активная вкладка по модели
|
|
if (Model is ILayoutGroup group && group.ActiveItem is not null)
|
|
{
|
|
var index = group.Items is IList<ILayoutItem> list
|
|
? list.IndexOf(group.ActiveItem)
|
|
: group.Items.ToList().IndexOf(group.ActiveItem);
|
|
|
|
if (index >= 0 && index < GroupControl.TabView.TabItems.Count)
|
|
GroupControl.TabView.SelectedIndex = index;
|
|
}
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public override void Detach()
|
|
{
|
|
foreach (var visual in Items)
|
|
visual.Detach();
|
|
|
|
GroupControl.TabView.TabItems.Clear();
|
|
}
|
|
}
|