DragAndDrop core
This commit is contained in:
81
Lattice.Layout.UI.WinUI/Visuals/WinUIGroupVisual.cs
Normal file
81
Lattice.Layout.UI.WinUI/Visuals/WinUIGroupVisual.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user