アプリケーションに2つのネストされたグリッド(FrameworkElement)アイテムがあります。
<UserControl xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<Grid x:name="OuterGrid">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction x:Name="TheOuterCommand" Command="{Binding OuterCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<Grid x:name="InnerGrid">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction x:Name="TheInnerCommand" Command="{Binding InnerCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
</Grid>
</UserControl>
各InvokeCommandsは、ビューモデルの(Prismライブラリからの)DelegateCommandにアタッチされます。
OuterCommand = new DelegateCommand(OuterCommandMethod, e => true);
InnerCommand = new DelegateCommand(InnerCommandMethod, e => true);
現時点では、 MouseLeftButtonEventがInnerGridレベルで処理されていないため、 InnerGridのEventTriggerもOuterGridのイベントをトリガーします。
EventTriggerに処理され、OuterGridにバブルアップしないように通知する方法はありますか?
現時点では、XAMLコードビハインドでイベントを使用してイベントを処理するように設定するInnerGridのラッパーFrameworkElementを使用することしか考えられません。他に何かアイデアはありますか?
----編集---- 最後に、アプリケーションにMVVM Lightを含め、InvokeCommandActionをRelayCommandに置き換えました。これは現在、意図したとおりに機能しています。ブライアントの答えを、私に提案をしてくれた勝者としてマークします。