

.NET Framework
4.5.2にLivet1.3を導入し、WPFのクライアントアプリケーションを作成しています。この度トリガーの勉強がてら、LivetのInteractionMessageTriggerと同じような機能を持つカスタムのトリガーを作ってみたのですが、目的の場所でTriggerBaseのInvokeActionsを呼び出した時、各ActionのInvokeActionが実行される時とされない時があります。ActionのInvokeActionが実行されるときの条件のようなものはありますでしょうか？
以下が問題のトリガーです。

[code]

    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); }));
    }
    
[/code]

上記コードの 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イベントの購読を解除していなかったのでこれも追加しました。しかし問題の現象は依然発生したままです。


CC BY-SA 4.0
2018-11-13T09:40:26.927
50287
2020-08-15T15:01:55.183
2018-11-14T01:43:03.063
30974
30974
question
c# wpf
Blend SDK for WPFのActionが動かない


自己解決いたしました。

今回このトリガーから呼び出していたアクションが、Livetの「InteractionMessageAction」を継承しておりました。このクラスにはWindowがアクティブな時のみアクションを実行するかどうかを指定する「InvokeActionOnlyWhenWindowIsActive」プロパティがあり、これがTrueだったためにウィンドウがアクティブでない時だけInvokeActionが実行されていませんでした。


CC BY-SA 4.0
2018-11-17T05:59:53.503
50394
2018-11-17T05:59:53.503
30974
50287
answer