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 = "Переместить";
};
}
}