Убраны синхронные методы

This commit is contained in:
2026-01-25 01:52:03 +03:00
parent 79bdd8bc62
commit a6ee6fcb36
22 changed files with 1108 additions and 2137 deletions

View File

@@ -0,0 +1,72 @@
using Lattice.Core.Geometry;
using Lattice.UI.DragDrop.Abstractions;
using Lattice.UI.DragDrop.WinUI.Controls;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
namespace Lattice.UI.DragDrop.WinUI.Services;
public class WinUIDragDropHost : IDragDropHost
{
private readonly DragDropOverlay _overlay;
private readonly Window _window;
public WinUIDragDropHost(Window window)
{
_window = window ?? throw new ArgumentNullException(nameof(window));
_overlay = new DragDropOverlay();
// Добавляем оверлей в окно
if (_window.Content is Panel panel)
{
panel.Children.Add(_overlay);
}
}
public void ShowDragVisual(object dragVisual, Point position)
{
if (dragVisual is UIElement element)
{
_overlay.ShowDragVisual(element, position.X, position.Y);
}
}
public void UpdateDragVisualPosition(object dragVisual, Point position)
{
if (dragVisual is UIElement element)
{
_overlay.UpdateDragVisualPosition(element, position.X, position.Y);
}
}
public void HideDragVisual(object dragVisual)
{
if (dragVisual is UIElement element)
{
_overlay.HideDragVisual(element);
}
else
{
// Скрываем все, если передан null
var current = _overlay.GetCurrentDragVisual();
if (current != null)
{
_overlay.HideDragVisual(current);
}
}
}
public void ShowDropAdorner(IDropVisualAdorner adorner)
{
if (adorner is DropPreviewAdorner dropAdorner)
{
// TODO: Показываем превью сброса
}
}
public void HideDropAdorner(IDropVisualAdorner adorner)
{
_overlay.HideAllDropPreviews();
}
}

View File

@@ -2,45 +2,22 @@
using Lattice.Core.Geometry;
using Lattice.UI.DragDrop.Abstractions;
using Lattice.UI.DragDrop.WinUI.Controls;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
namespace Lattice.UI.DragDrop.WinUI.Services;
/// <summary>
/// Поставщик визуального представления для WinUI.
/// </summary>
public class WinUIDragVisualProvider : IDragVisualProvider
{
private readonly ResourceDictionary _resources;
private DragAdorner? _currentAdorner;
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="WinUIDragVisualProvider"/>.
/// </summary>
/// <param name="resources">Ресурсы для стилей.</param>
public WinUIDragVisualProvider(ResourceDictionary resources)
{
_resources = resources ?? throw new ArgumentNullException(nameof(resources));
}
/// <inheritdoc/>
public object CreateDragVisual(DragInfo dragInfo, Point initialPosition)
{
// Создаем новый DragAdorner
// Создаем DragAdorner на основе данных
_currentAdorner = new DragAdorner
{
DragData = dragInfo.Data,
OpacityLevel = 0.8
};
// Применяем стиль из ресурсов, если есть
if (_resources.ContainsKey("DragAdornerStyle"))
{
_currentAdorner.Style = _resources["DragAdornerStyle"] as Style;
}
// Настраиваем начальную позицию
_currentAdorner.UpdatePosition(initialPosition);
_currentAdorner.Show();
@@ -48,7 +25,6 @@ public class WinUIDragVisualProvider : IDragVisualProvider
return _currentAdorner;
}
/// <inheritdoc/>
public void UpdateDragVisualPosition(object dragVisual, Point position)
{
if (dragVisual is DragAdorner adorner)
@@ -57,31 +33,12 @@ public class WinUIDragVisualProvider : IDragVisualProvider
}
}
/// <inheritdoc/>
public void ReleaseDragVisual(object dragVisual)
{
if (dragVisual is DragAdorner adorner)
{
adorner.Hide();
// Отложенное удаление после анимации
var timer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(150)
};
timer.Tick += (s, e) =>
{
timer.Stop();
if (adorner.Parent is Panel panel)
{
panel.Children.Remove(adorner);
}
};
timer.Start();
_currentAdorner = null;
}
_currentAdorner = null;
}
}