private static void OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DependencyObject target = d; if (e.OldValue != null) { InteractivityTemplate interactivityTemplate = (InteractivityTemplate)e.OldValue; InteractivityItems interactivityItems = (InteractivityItems)interactivityTemplate.LoadContent(); BehaviorCollection behaviorCollection = Interaction.GetBehaviors(target); TriggerCollection triggerCollection = Interaction.GetTriggers(target); interactivityItems.Behaviors.ForEach(x => behaviorCollection.Remove(x)); interactivityItems.Triggers.ForEach(x => triggerCollection.Remove(x)); } if (e.NewValue != null) { InteractivityTemplate interactivityTemplate = (InteractivityTemplate)e.NewValue; interactivityTemplate.Seal(); InteractivityItems interactivityItems = (InteractivityItems)interactivityTemplate.LoadContent(); BehaviorCollection behaviorCollection = Interaction.GetBehaviors(target); TriggerCollection triggerCollection = Interaction.GetTriggers(target); interactivityItems.Behaviors.ForEach(behaviorCollection.Add); interactivityItems.Triggers.ForEach(triggerCollection.Add); } }
/// <summary> /// This is used to refresh the binding when our parent's binding changes /// For some reason in WinRT, when the parent's binding is changed due to /// inheritance, our binding does not get refreshed. This code is an attempt /// to work around that issue. /// </summary> /// <param name="dpo"></param> /// <param name="e"></param> private static void DataContextChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e) { foreach (var pt in Interaction.GetTriggers(dpo)) { pt.SetupBinding(); } foreach (var pb in Interaction.GetBehaviors(dpo)) { pb.SetupBinding(); } }
protected override void OnAttached() { var triggers = Interaction_ .GetTriggers(AssociatedObject) .OfType <EventTrigger>(); var actions = triggers .First(t => t.EventName == "Closing") .Actions .OfType <InvokeCommandAction>(); _commandAction = actions.First(); AssociatedObject.Closing += _windowClosingHandler; }
private static void OnTemplateChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { InteractivityTemplate dt = (InteractivityTemplate)e.NewValue; #if (!SILVERLIGHT) dt.Seal(); #endif InteractivityItems ih = (InteractivityItems)dt.LoadContent(); BehaviorCollection bc = Interaction.GetBehaviors(d); TriggerCollection tc = Interaction.GetTriggers(d); foreach (Behavior behavior in ih.Behaviors) { bc.Add(behavior); } foreach (TriggerBase trigger in ih.Triggers) { tc.Add(trigger); } }