# 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 ``` ## 🔗 Зависимости - `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 { protected override void SubscribeToEvents(MyElement element) { // Подписка на события элемента } public override bool CanStartDrag(out DragInfo? dragInfo) { // Реализация проверки возможности перетаскивания } } ``` ## 📚 API Reference ### Основные типы | Тип | Описание | |-----|----------| | `DragSourceBehaviorBase` | Базовый класс для поведения источника | | `DropTargetBehaviorBase` | Базовый класс для поведения цели | | `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)