using System.Windows; using System.Windows.Controls; using HandyControl.Interactivity; namespace HandyControl.Controls; public class PanelElement { public static readonly DependencyProperty FluidMoveBehaviorProperty = DependencyProperty.RegisterAttached( "FluidMoveBehavior", typeof(FluidMoveBehavior), typeof(PanelElement), new PropertyMetadata(default(FluidMoveBehavior), OnFluidMoveBehaviorChanged)); private static void OnFluidMoveBehaviorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is Panel panel) { var collection = Interaction.GetBehaviors(panel); var oldBehavior = GetTempFluidMoveBehavior(panel); collection.ItemRemoved(oldBehavior); panel.SetCurrentValue(TempFluidMoveBehaviorProperty, DependencyProperty.UnsetValue); if (e.NewValue is FluidMoveBehavior behavior) { collection.ItemAdded(behavior); SetTempFluidMoveBehavior(panel, behavior); } } } public static void SetFluidMoveBehavior(DependencyObject element, FluidMoveBehavior value) => element.SetValue(FluidMoveBehaviorProperty, value); public static FluidMoveBehavior GetFluidMoveBehavior(DependencyObject element) => (FluidMoveBehavior) element.GetValue(FluidMoveBehaviorProperty); private static readonly DependencyProperty TempFluidMoveBehaviorProperty = DependencyProperty.RegisterAttached( "TempFluidMoveBehavior", typeof(FluidMoveBehavior), typeof(PanelElement), new PropertyMetadata(default(FluidMoveBehavior))); private static void SetTempFluidMoveBehavior(DependencyObject element, FluidMoveBehavior value) => element.SetValue(TempFluidMoveBehaviorProperty, value); private static FluidMoveBehavior GetTempFluidMoveBehavior(DependencyObject element) => (FluidMoveBehavior) element.GetValue(TempFluidMoveBehaviorProperty); }