namespace Lattice.Core.DragDrop.Enums; /// /// Определяет эффекты, которые могут быть применены при операции перетаскивания. /// /// /// Этот перечисление используется для указания допустимых операций перетаскивания /// и передачи информации о результате операции между источником и целью. /// [Flags] public enum DragDropEffects { /// /// Операция перетаскивания не разрешена. /// None = 0, /// /// Данные копируются из источника в цель. /// Copy = 1 << 0, /// /// Данные перемещаются из источника в цель. /// Move = 1 << 1, /// /// Создается ссылка на исходные данные. /// Link = 1 << 2, /// /// Целевой элемент может прокручиваться во время перетаскивания. /// Scroll = 1 << 3, /// /// Комбинированный эффект копирования и перемещения. /// CopyOrMove = Copy | Move, /// /// Все эффекты разрешены. /// All = Copy | Move | Link | Scroll } /// /// Расширения для работы с DragDropEffects. /// public static class DragDropEffectsExtensions { /// /// Проверяет, содержит ли эффекты указанный эффект. /// public static bool HasEffect(this DragDropEffects effects, DragDropEffects effect) { return (effects & effect) == effect; } /// /// Проверяет, содержат ли эффекты копирование. /// public static bool CanCopy(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Copy); } /// /// Проверяет, содержат ли эффекты перемещение. /// public static bool CanMove(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Move); } /// /// Проверяет, содержат ли эффекты ссылку. /// public static bool CanLink(this DragDropEffects effects) { return effects.HasEffect(DragDropEffects.Link); } /// /// Получает наиболее подходящий эффект на основе модификаторов клавиатуры. /// public static DragDropEffects GetEffectFromKeys(bool controlKey, bool shiftKey, bool altKey) { if (controlKey && altKey) return DragDropEffects.Link; if (controlKey) return DragDropEffects.Copy; if (shiftKey) return DragDropEffects.Move; if (altKey) return DragDropEffects.Link; return DragDropEffects.Move; // По умолчанию } }