/// <summary> /// AttachedPropertyActionに、通知時に実行するViewの処理を埋め込みます /// </summary> /// <param name="attachedProperty"></param> /// <param name="d"></param> /// <param name="e"></param> /// <param name="action"></param> public static void Inject(DependencyProperty attachedProperty, DependencyObject d, DependencyPropertyChangedEventArgs e, Action <TControl, TParam> action) { var control = d as TControl; if (control == null) { return; } var oldVal = e.OldValue as InjectedViewAction <TParam>; if (oldVal != null) { // 古いハンドラを削除 oldVal.Remove(attachedProperty.Name, control); } var newVal = e.NewValue as InjectedViewAction <TParam>; if (newVal != null) { // 新しいハンドラを登録 var handler = new InjectedViewActionHandler <TControl, TParam>(attachedProperty.Name, control, action); newVal.Add(handler); } }
private void OnTriggerChanged(DependencyPropertyChangedEventArgs e) { InjectedViewActionHandler <FrameworkElement, object> .Inject(TriggerProperty, this.AssociatedObject, e, (element, param) => { this.InvokeActions(param); }); }