Blend SDK for WPFのActionが動かない
.NET Framework 4.5.2にLivet1.3を導入し、WPFのクライアントアプリケーションを作成しています。この度トリガーの勉強がてら、LivetのInteractionMessageTriggerと同じような機能を持つカスタムのトリガーを作ってみたのですが、目的の場所でTriggerBaseのInvokeActionsを呼び出した時、各ActionのInvokeActionが実行される時とされない時があります。ActionのInvokeActionが実行されるときの条件のようなものはありますでしょうか? 以下が問題のトリガーです。
public class CustomInteractionMessageTrigger : TriggerBase<FrameworkElement>
{
public string MessageKey
{
get { return (string)GetValue(MessageKeyProperty); }
set { SetValue(MessageKeyProperty, value); }
}
public InteractionMessenger Messenger
{
get { return (InteractionMessenger)GetValue(MessengerProperty); }
set { SetValue(MessengerProperty, value); }
}
protected override void OnAttached()
{
base.OnAttached();
}
protected override void OnDetaching()
{
base.OnDetaching();
}
private void MessengerPropertyChanged(DependencyPropertyChangedEventArgs e)
{
if (e.OldValue != null)
{
((InteractionMessenger)(e.OldValue)).Raised -= CustomInteractionMessageTrigger_Raised;
}
if (e.NewValue != null)
{
((InteractionMessenger)(e.NewValue)).Raised += CustomInteractionMessageTrigger_Raised;
}
}
private void CustomInteractionMessageTrigger_Raised(object sender, InteractionMessageRaisedEventArgs e)
{
if (e.Message.MessageKey == MessageKey)
{
InvokeActions(e.Message);
}
}
public static readonly DependencyProperty MessageKeyProperty = DependencyProperty.Register(
nameof(MessageKey),
typeof(string),
typeof(CustomInteractionMessageTrigger),
new PropertyMetadata(null));
public static readonly DependencyProperty MessengerProperty = DependencyProperty.Register(
nameof(Messenger),
typeof(InteractionMessenger),
typeof(CustomInteractionMessageTrigger),
new PropertyMetadata(null, (d, e) => { ((CustomInteractionMessageTrigger)d).MessengerPropertyChanged(e); }));
}
上記コードの InvokeActions(e.Message) にブレークポイントを付けたところ、呼び出されていることは確認できました。InvokeActionsを呼べばActionは必ず実行されるものだと思っていたのですが…
開発環境のOSはWindows 10(1703)、IDEはVisualStudio 2015 Update3です。
情報不足などがありましたらご指摘ください。
よろしくお願いいたします。
11月14日追記:
ここ (https://msdn.microsoft.com/ja-jp/library/dn195735(v=vs.120).aspx) を見たところ、OnAttachedおよびOnDetachingを書いていないことに気づいたので追加しました。また、Messengerが変化した際にRaisedイベントの購読を解除していなかったのでこれも追加しました。しかし問題の現象は依然発生したままです。