PanelElement.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using HandyControl.Interactivity;
  4. namespace HandyControl.Controls;
  5. public class PanelElement
  6. {
  7. public static readonly DependencyProperty FluidMoveBehaviorProperty = DependencyProperty.RegisterAttached(
  8. "FluidMoveBehavior", typeof(FluidMoveBehavior), typeof(PanelElement), new PropertyMetadata(default(FluidMoveBehavior), OnFluidMoveBehaviorChanged));
  9. private static void OnFluidMoveBehaviorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  10. {
  11. if (d is Panel panel)
  12. {
  13. var collection = Interaction.GetBehaviors(panel);
  14. var oldBehavior = GetTempFluidMoveBehavior(panel);
  15. collection.ItemRemoved(oldBehavior);
  16. panel.SetCurrentValue(TempFluidMoveBehaviorProperty, DependencyProperty.UnsetValue);
  17. if (e.NewValue is FluidMoveBehavior behavior)
  18. {
  19. collection.ItemAdded(behavior);
  20. SetTempFluidMoveBehavior(panel, behavior);
  21. }
  22. }
  23. }
  24. public static void SetFluidMoveBehavior(DependencyObject element, FluidMoveBehavior value)
  25. => element.SetValue(FluidMoveBehaviorProperty, value);
  26. public static FluidMoveBehavior GetFluidMoveBehavior(DependencyObject element)
  27. => (FluidMoveBehavior) element.GetValue(FluidMoveBehaviorProperty);
  28. private static readonly DependencyProperty TempFluidMoveBehaviorProperty = DependencyProperty.RegisterAttached(
  29. "TempFluidMoveBehavior", typeof(FluidMoveBehavior), typeof(PanelElement), new PropertyMetadata(default(FluidMoveBehavior)));
  30. private static void SetTempFluidMoveBehavior(DependencyObject element, FluidMoveBehavior value)
  31. => element.SetValue(TempFluidMoveBehaviorProperty, value);
  32. private static FluidMoveBehavior GetTempFluidMoveBehavior(DependencyObject element)
  33. => (FluidMoveBehavior) element.GetValue(TempFluidMoveBehaviorProperty);
  34. }