Я понял, что при использовании InvokeCommandAcction, связанной с EventTrigger, исходное событие все еще направлялось до родительских элементов, пока оно не было обработано.Ну, я думаю, это ожидаемое поведение.Но мой вопрос заключается в том, как я могу пометить событие как Обработанное, чтобы оно не распространялось вверх по всему дереву пользовательского интерфейса?
На самом деле, когда вы обрабатываете это событие в команде, все будет обрабатываться в этой команде, поэтомуэто не должно распространяться.И в одном случае, который я обнаружил, это вызывает нежелательное поведение.Например, я открываю новое окно, когда пользователь дважды щелкает элемент (событие MouseDoubleClick).Проблема в том, что новые окна открываются, а затем главное окно возвращается перед новым, потому что событие MouseDoubleClick только что достигло верхнего элемента в дереве пользовательского интерфейса.Требуемое поведение состояло бы в том, чтобы сохранить новое окно впереди, но поскольку InvokeCommandAction позволяет событию распространяться вверх, главное окно возвращает фокус ...
Что я мог сделать, это вместо этого использовать актив CallMethodActionно, поскольку я нахожусь в сценарии MVVM, я не хочу, чтобы в моем коде были аргументы событий пользовательского интерфейса.Даже если это позволило бы мне неявно пометить событие как обработанное и устранить проблему.
<UserControl x:Class="..."
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Path=DisplayReportCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
...
</UserControl>