Silverlight 4 EventTrigger Обработано - PullRequest
       8

Silverlight 4 EventTrigger Обработано

0 голосов
/ 22 сентября 2011

У меня есть два вложенных элемента Grid (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 присоединена к DelegateCommand (из библиотек Prism) в модели представления.

OuterCommand = new DelegateCommand(OuterCommandMethod, e => true);
InnerCommand = new DelegateCommand(InnerCommandMethod, e => true);

В данный момент EventTrigger на InnerGrid также вызывает событие на OuterGrid из-за того, что MouseLeftButtonEvent не обрабатывается вуровень InnerGrid .

Есть ли способ уведомить EventTrigger , что он обработан и не должен всплывать до OuterGrid?

В настоящий момент все, что я могу сделать, - это иметь оболочку FrameworkElement вокруг InnerGrid, которая использует событие в коде XAML для установки события в обработку.У кого-нибудь есть другие идеи?

---- Edit ---- В конце я включил MVVM Light в свое приложение и заменил InvokeCommandAction на RelayCommand.Теперь это работает, как я и хотел.Я отмечу ответ Брайанта как победителя, который дал мне предложение.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2012

Мы расширили EventTrigger, добавив свойство зависимости с именем IsInner, а затем мы всегда устанавливаем статический флаг во внутреннем EventTrigger.Внешний EventTrigger снимает флажок и возвращает, если флаг был установлен.Это очень легко написать и хорошо работает.

0 голосов
/ 22 сентября 2011

Лучше всего было бы передать аргументы события в Команду, а затем отметить событие, обработанное с использованием аргументов события.Вы можете сделать это, следуя этому примеру здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...