using Lattice.Themes; using Lattice.Themes.Core.Tokens; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace Lattice.UI.DragDrop.WinUI.Extensions; /// /// Методы расширения для работы с темами в DragDrop. /// public static class ThemeExtensions { /// /// Применяет стиль перетаскивания, основанный на токенах темы. /// public static void ApplyLatticeDragStyle(this Control control) { var style = Application.Current.Resources["Lattice.DragDrop.DragSourceStyle"] as Style; if (style != null) { control.Style = style; } else { // Fallback на старый стиль control.ApplyDragStyle(); } } /// /// Применяет стиль цели сброса, основанный на токенах темы. /// public static void ApplyLatticeDropTargetStyle(this Control control) { var style = Application.Current.Resources["Lattice.DragDrop.DropTargetStyle"] as Style; if (style != null) { control.Style = style; } else { // Fallback на старый стиль control.ApplyDropTargetStyle(); } } /// /// Переключает визуальное состояние элемента с использованием токенов темы. /// public static void SetLatticeDragVisualState(this Control control, string stateName, bool useTransitions = true) { try { VisualStateManager.GoToState(control, stateName, useTransitions); } catch { // Fallback на альтернативные методы с использованием токенов var themeManager = ThemeManager.Current; switch (stateName) { case "Dragging": control.Opacity = themeManager.GetTokenValue(LatticeTokens.OpacityDrag) ?? 0.7; control.RenderTransform = new Microsoft.UI.Xaml.Media.ScaleTransform { ScaleX = 0.95, ScaleY = 0.95 }; break; case "DragOver": var dragOverBrush = themeManager.GetTokenValue( LatticeTokens.BrushDragOverlay); control.Background = dragOverBrush ?? Application.Current.Resources["Lattice.DragDrop.DragOverBackgroundBrush"] as Microsoft.UI.Xaml.Media.Brush; break; case "Normal": control.ClearValue(Control.OpacityProperty); control.ClearValue(Control.RenderTransformProperty); control.ClearValue(Control.BackgroundProperty); control.ClearValue(Control.BorderBrushProperty); break; } } } /// /// Получает значение токена для использования в DragDrop. /// public static T? GetDragDropToken(this Control control, string tokenKey) where T : class { var themeManager = ThemeManager.Current; return themeManager.GetTokenValue(tokenKey); } /// /// Создает DragAdorner с использованием токенов темы. /// public static Controls.DragAdorner CreateLatticeDragAdorner(object dragData) { return new Controls.DragAdorner { DragData = dragData, Style = Application.Current.Resources["Lattice.DragDrop.DragSourceStyle"] as Style }; } /// /// Создает DropPreviewAdorner с использованием токенов темы. /// public static Controls.DropPreviewAdorner CreateLatticeDropPreviewAdorner() { return new Controls.DropPreviewAdorner { Style = Application.Current.Resources[typeof(Controls.DropPreviewAdorner)] as Style }; } }