Доработан winui
This commit is contained in:
53
Lattice.UI.Docking.WinUI/Services/DragDropService.cs
Normal file
53
Lattice.UI.Docking.WinUI/Services/DragDropService.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
using System;
|
||||
|
||||
namespace Lattice.UI.Docking.WinUI.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Сервис для управления операциями Drag & Drop в WinUI.
|
||||
/// </summary>
|
||||
public static class DragDropService
|
||||
{
|
||||
/// <summary>
|
||||
/// Настраивает элемент для поддержки перетаскивания.
|
||||
/// </summary>
|
||||
public static void SetupDragElement(UIElement element, Func<object?> 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;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Настраивает элемент для приема сброса.
|
||||
/// </summary>
|
||||
public static void SetupDropElement(UIElement element, Func<object, bool> 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 = "Переместить";
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user