136 lines
4.7 KiB
Markdown
136 lines
4.7 KiB
Markdown
# Lattice.UI.DragDrop
|
||
|
||

|
||

|
||

|
||
|
||
Кроссплатформенные абстракции для системы перетаскивания в 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) |