using Microsoft.UI.Xaml; using System; namespace Lattice.UI.Docking.WinUI.Services; /// /// Сервис для управления операциями Drag & Drop в WinUI. /// public static class DragDropService { /// /// Настраивает элемент для поддержки перетаскивания. /// public static void SetupDragElement(UIElement element, Func getDataCallback) { element.CanDrag = true; element.DragStarting += (sender, args) => { var data = getDataCallback(); if (data != null) { args.Data.Properties.Add("LatticeDockElement", data); args.Data.SetData("LatticeDockElement", data); args.AllowedOperations = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move; } }; } /// /// Настраивает элемент для приема сброса. /// public static void SetupDropElement(UIElement element, Func dropCallback) { element.AllowDrop = true; element.Drop += (sender, args) => { if (args.DataView.Properties.TryGetValue("LatticeDockElement", out var data)) { if (dropCallback(data)) { args.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move; } } }; element.DragOver += (sender, args) => { args.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move; args.DragUIOverride.IsGlyphVisible = true; args.DragUIOverride.Caption = "Переместить"; }; } }