using Lattice.Layout.Abstractions; using Lattice.Layout.UI.WinUI.Controls; using Microsoft.UI.Xaml; using System; namespace Lattice.Layout.UI.WinUI; /// /// Набор вспомогательных методов для упрощённой работы с визуальным хостом раскладки. /// Позволяет быстро подключать LayoutManager, обновлять UI и связывать содержимое. /// public static class LayoutHostExtensions { // ------------------------------------------------------------------------ // 1. Подключение LayoutManager к любому ILayoutView // ------------------------------------------------------------------------ /// /// Подписывает визуальный хост на события изменения раскладки. /// При каждом изменении модели вызывается . /// /// Визуальный хост раскладки. /// Менеджер раскладки. public static void BindToManager(this ILayoutView view, ILayoutManager manager) { manager.LayoutChanged += (_, _) => view.Refresh(); } // ------------------------------------------------------------------------ // 2. Полная инициализация раскладки (Root + Manager) // ------------------------------------------------------------------------ /// /// Устанавливает корневой элемент раскладки, подключает менеджер и выполняет начальную отрисовку. /// /// Визуальный хост раскладки. /// Корневой элемент раскладки. /// Менеджер раскладки. public static void UseLayout(this ILayoutView view, ILayoutRoot root, ILayoutManager manager) { view.Root = root; view.BindToManager(manager); view.Refresh(); } // ------------------------------------------------------------------------ // 3. Удобный fluent-API // ------------------------------------------------------------------------ /// /// Устанавливает корневой элемент раскладки и возвращает хост для fluent-цепочек. /// public static T WithRoot(this T view, ILayoutRoot root) where T : ILayoutView { view.Root = root; return view; } /// /// Подключает менеджер раскладки и возвращает хост для fluent-цепочек. /// public static T WithManager(this T view, ILayoutManager manager) where T : ILayoutView { view.BindToManager(manager); return view; } /// /// Выполняет начальную отрисовку и возвращает хост для fluent-цепочек. /// public static T Initialize(this T view) where T : ILayoutView { view.Refresh(); return view; } // ------------------------------------------------------------------------ // 4. Поддержка WinUILayoutHost: резолвер контента // ------------------------------------------------------------------------ /// /// Устанавливает функцию, которая по ContentId возвращает реальный UI-элемент. /// Используется для отображения содержимого вкладок. /// /// WinUI-хост раскладки. /// Функция, возвращающая UIElement по ContentId. public static void UseContentResolver(this WinUILayoutHost host, Func resolver) { host.ContentResolver = resolver; } // ------------------------------------------------------------------------ // 5. Полная WinUI-инициализация (Root + Manager + ContentResolver) // ------------------------------------------------------------------------ /// /// Полностью инициализирует WinUI-хост раскладки: /// устанавливает корень, подключает менеджер, задаёт резолвер содержимого и выполняет отрисовку. /// /// WinUI-хост раскладки. /// Корневой элемент раскладки. /// Менеджер раскладки. /// Функция получения UI-содержимого по ContentId. public static void UseLayout( this WinUILayoutHost host, ILayoutRoot root, ILayoutManager manager, Func resolver) { host.Root = root; host.BindToManager(manager); host.ContentResolver = resolver; host.Refresh(); } }