Files
Lattice/Lattice.UI.DragDrop/README.md
2026-01-18 16:33:35 +03:00

136 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)