private static int GetIndexOf(BehaviorCollection itemBehaviors, Behavior behavior) { int index = -1; Behavior orignalBehavior = GetOriginalBehavior(behavior); for (int i = 0; i < itemBehaviors.Count; i++) { Behavior currentBehavior = itemBehaviors[i]; if (currentBehavior == behavior || currentBehavior == orignalBehavior) { index = i; break; } Behavior currentOrignalBehavior = GetOriginalBehavior(currentBehavior); if (currentOrignalBehavior == behavior || currentOrignalBehavior == orignalBehavior) { index = i; break; } } return(index); }
public static BehaviorCollection GetBehaviors(DependencyObject obj) { BehaviorCollection behaviorCollection = (BehaviorCollection)obj.GetValue(Interaction.BehaviorsProperty); if (behaviorCollection == null) { behaviorCollection = new BehaviorCollection(); obj.SetValue(Interaction.BehaviorsProperty, behaviorCollection); } return(behaviorCollection); }
private static void OnPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e) { var uie = dpo as UIElement; if (uie == null) { return; } BehaviorCollection itemBehaviors = Interaction.GetBehaviors(uie); var newBehaviors = e.NewValue as StylizedBehaviorCollection; var oldBehaviors = e.OldValue as StylizedBehaviorCollection; if (newBehaviors == oldBehaviors) { return; } if (oldBehaviors != null) { foreach (var behavior in oldBehaviors) { int index = GetIndexOf(itemBehaviors, behavior); if (index >= 0) { itemBehaviors.RemoveAt(index); } } } if (newBehaviors != null) { foreach (var behavior in newBehaviors) { int index = GetIndexOf(itemBehaviors, behavior); if (index < 0) { var clone = (Behavior)behavior.Clone(); SetOriginalBehavior(clone, behavior); itemBehaviors.Add(clone); } } } }
private static void OnBehaviorsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args) { BehaviorCollection behaviorCollection = (BehaviorCollection)args.OldValue; BehaviorCollection behaviorCollection2 = (BehaviorCollection)args.NewValue; if (behaviorCollection != behaviorCollection2) { if (behaviorCollection != null && ((IAttachedObject)behaviorCollection).AssociatedObject != null) { behaviorCollection.Detach(); } if (behaviorCollection2 != null && obj != null) { if (((IAttachedObject)behaviorCollection2).AssociatedObject != null) { throw new InvalidOperationException("CannotHostBehaviorCollectionMultipleTimesExceptionMessage"); } behaviorCollection2.Attach(obj); } } }