DragAndDrop core

This commit is contained in:
FrigaT
2026-01-18 16:33:35 +03:00
parent 9ea82af329
commit 79bdd8bc62
229 changed files with 21214 additions and 2494 deletions

View File

@@ -0,0 +1,136 @@
# Lattice.UI.DragDrop
![Lattice Framework](https://img.shields.io/badge/Lattice-UI%20Framework-blueviolet)
![Version](https://img.shields.io/badge/version-1.0.0-green)
![License](https://img.shields.io/badge/license-MIT-blue)
Кроссплатформенные абстракции для системы перетаскивания в Lattice UI Framework.
## 📦 О проекте
`Lattice.UI.DragDrop` предоставляет платформонезависимые интерфейсы и базовые классы для реализации drag-and-drop функциональности.
Этот проект служит основой для конкретных реализаций на различных платформах (WinUI, Uno Platform, MAUI и т.д.).
## 🎯 Особенности
- **Абстрактные интерфейсы** для источников перетаскивания и целей сброса
- **Базовые классы поведения** для упрощения реализации
- **Платформонезависимая архитектура**
- **Поддержка сложных сценариев** (переупорядочивание, вложенное перетаскивание)
- **Расширяемая система событий**
## 🔧 Интерфейсы
### IDragVisualProvider
```csharp
public interface IDragVisualProvider
{
object CreateDragVisual(DragInfo dragInfo, Point initialPosition);
void UpdateDragVisualPosition(object dragVisual, Point position);
void ReleaseDragVisual(object dragVisual);
}
```
### IDropVisualAdorner
```csharp
public interface IDropVisualAdorner
{
void Show(DropInfo dropInfo, Rect targetBounds);
void Update(DropInfo dropInfo);
void Hide();
}
```
## 📦 Установка
Добавьте проект как ссылку в ваше решение или установите как NuGet пакет:
```xml
<PackageReference Include="Lattice.UI.DragDrop" Version="1.0.0" />
```
## 🔗 Зависимости
- `Lattice.Core.DragDrop` >= 1.0.0
- `Lattice.Core.Geometry` >= 1.0.0
- `Microsoft.Extensions.DependencyInjection.Abstractions` >= 8.0.0
## 🚀 Быстрый старт
### 1. Регистрация сервисов
```csharp
using Lattice.UI.DragDrop.Extensions;
public void ConfigureServices(IServiceCollection services)
{
services.AddLatticeDragDrop();
}
```
### 2. Создание кастомного поведения
```csharp
using Lattice.UI.DragDrop.Behaviors;
public class MyDragSource : DragSourceBehaviorBase<MyElement>
{
protected override void SubscribeToEvents(MyElement element)
{
// Подписка на события элемента
}
public override bool CanStartDrag(out DragInfo? dragInfo)
{
// Реализация проверки возможности перетаскивания
}
}
```
## 📚 API Reference
### Основные типы
| Тип | Описание |
|-----|----------|
| `DragSourceBehaviorBase<T>` | Базовый класс для поведения источника |
| `DropTargetBehaviorBase<T>` | Базовый класс для поведения цели |
| `IDragVisualProvider` | Поставщик визуального представления |
| `IDropVisualAdorner` | Визуальный элемент обратной связи |
### Расширения DI
- `AddLatticeDragDrop()` - регистрация сервисов перетаскивания
## 🔄 Интеграция с платформенными проектами
Этот проект предназначен для наследования платформенными реализациями:
1. **WinUI**: `Lattice.UI.DragDrop.WinUI`
2. **Uno Platform**: `Lattice.UI.DragDrop.Uno` (планируется)
3. **MAUI**: `Lattice.UI.DragDrop.Maui` (планируется)
## 🧪 Тестирование
Проект включает модульные тесты для всех публичных API:
```bash
dotnet test Lattice.UI.DragDrop.Tests
```
## 📄 Лицензия
MIT License. Подробности в файле [LICENSE](LICENSE).
## 🤝 Участие в разработке
1. Форкните репозиторий
2. Создайте ветку для вашей функции
3. Сделайте коммит изменений
4. Отправьте пул-реквест
## 📞 Поддержка
- Документация: [lattice-framework.github.io](https://lattice-framework.github.io)
- Issues: [GitHub Issues](https://github.com/lattice-framework/ui-dragdrop/issues)
- Обсуждения: [GitHub Discussions](https://github.com/lattice-framework/ui-dragdrop/discussions)