Interaction.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Windows;
  3. namespace HandyControl.Interactivity;
  4. public static class Interaction
  5. {
  6. private static readonly DependencyProperty TriggersProperty =
  7. DependencyProperty.RegisterAttached("ShadowTriggers", typeof(TriggerCollection), typeof(Interaction),
  8. new FrameworkPropertyMetadata(OnTriggersChanged));
  9. private static readonly DependencyProperty BehaviorsProperty =
  10. DependencyProperty.RegisterAttached("ShadowBehaviors", typeof(BehaviorCollection), typeof(Interaction),
  11. new FrameworkPropertyMetadata(OnBehaviorsChanged));
  12. internal static bool ShouldRunInDesignMode { get; set; }
  13. public static TriggerCollection GetTriggers(DependencyObject obj)
  14. {
  15. var triggerCollection = (TriggerCollection) obj.GetValue(TriggersProperty);
  16. if (triggerCollection == null)
  17. {
  18. triggerCollection = new TriggerCollection();
  19. obj.SetValue(TriggersProperty, triggerCollection);
  20. }
  21. return triggerCollection;
  22. }
  23. public static BehaviorCollection GetBehaviors(DependencyObject obj)
  24. {
  25. var behaviorCollection = (BehaviorCollection) obj.GetValue(BehaviorsProperty);
  26. if (behaviorCollection == null)
  27. {
  28. behaviorCollection = new BehaviorCollection();
  29. obj.SetValue(BehaviorsProperty, behaviorCollection);
  30. }
  31. return behaviorCollection;
  32. }
  33. private static void OnBehaviorsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
  34. {
  35. var oldValue = (BehaviorCollection) args.OldValue;
  36. var newValue = (BehaviorCollection) args.NewValue;
  37. if (Equals(oldValue, newValue))
  38. return;
  39. if (oldValue?.AssociatedObject != null)
  40. oldValue.Detach();
  41. if (newValue == null || obj == null)
  42. return;
  43. if (newValue.AssociatedObject != null)
  44. throw new InvalidOperationException(ExceptionStringTable
  45. .CannotHostBehaviorCollectionMultipleTimesExceptionMessage);
  46. newValue.Attach(obj);
  47. }
  48. private static void OnTriggersChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
  49. {
  50. var oldValue = args.OldValue as TriggerCollection;
  51. var newValue = args.NewValue as TriggerCollection;
  52. if (Equals(oldValue, newValue))
  53. return;
  54. if (oldValue?.AssociatedObject != null)
  55. oldValue.Detach();
  56. if (newValue == null || obj == null)
  57. return;
  58. if (newValue.AssociatedObject != null)
  59. throw new InvalidOperationException(ExceptionStringTable
  60. .CannotHostTriggerCollectionMultipleTimesExceptionMessage);
  61. newValue.Attach(obj);
  62. }
  63. internal static bool IsElementLoaded(FrameworkElement element)
  64. {
  65. return element.IsLoaded;
  66. }
  67. }