Триггер взаимодействия WPF Событие MouseDoubleClick не запускается

У меня есть событие MouseDoubleClick в следующем файле .xaml, который не срабатывает должным образом:

<Style TargetType="controls:Source" x:Key="{x:Type controls:Source}">
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="controls:Source">
      <Border BorderThickness="0.8" CornerRadius="10" BorderBrush="{TemplateBinding Foreground}"
              d:DataContext="{d:DesignInstance d:Type=viewModels:SourceViewModel}">
        <Grid Style="{StaticResource ElementThatClipsToParentBordersStyle}">
          <Image Source="{Binding AttachedSource.Image, RelativeSource={RelativeSource TemplatedParent}}" Stretch="Fill" />

          <Border x:Name="Selection"
                  Opacity="0.3"
                  Background="{TemplateBinding Foreground}"
                  Visibility="Collapsed"
                  IsHitTestVisible="False"/>
        </Grid>

        <i:Interaction.Triggers>
          <i:EventTrigger EventName="MouseLeftButtonDown">
            <interactivity:InvokeCommandAction Command="{Binding DataContext.SelectionState.ClickSourceCommand, ElementName=SourcesControl}"
                                               CommandParameter="{Binding}" />
          </i:EventTrigger>

          <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
            <interactivity:InvokeCommandAction Command="{Binding PreviewLeftClickCommand}" />
          </i:EventTrigger>

          <i:EventTrigger EventName="MouseMove">
            <interactivity:InvokeCommandAction Command="{Binding MouseMoveCommand}" />
          </i:EventTrigger>

          <i:EventTrigger EventName="MouseDoubleClick">
            <interactivity:InvokeCommandAction Command="{Binding SourceDoubleClickCommand}"
                                               CommandParameter="{Binding}" />
          </i:EventTrigger>
        </i:Interaction.Triggers>

      </Border>

      <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="True">
          <Setter TargetName="Selection" Property="Visibility" Value="Visible" />
        </Trigger>
      </ControlTemplate.Triggers>
    </ControlTemplate>
  </Setter.Value>
</Setter>

Любое другое событие работает нормально и по назначению, но команда, связанная с событием MouseDoubleClick, не выполняется.

Странно то, что когда я использую другое событие, такое как MouseLeftButtonDown, все работает, поэтому проблема, похоже, связана не с выполненной командой, а с самим используемым событием.

Конечно, я мог бы обойти эту проблему, используя простое событие MouseLeftButtonDown и проверяя время последнего щелчка, чтобы идентифицировать двойной щелчок, но встроенное событие двойного щелчка кажется мне лучшим способом.

Кто-нибудь знает, почему событие MouseDoubleClick не срабатывает должным образом в этом сценарии?


person Kerl    schedule 28.09.2015    source источник


Ответы (1)


Border не имеет события MouseDoubleClick, потому что это не элемент управления. Есть несколько способов сделать MouseDoubleClickдоступным. См. Почему пограничный контроль WPF не имеет события mousedoubleclick?< /а>.

Самый простой способ — обернуть границу в ContentControl, который вызовет событие MouseDoubleClick (от http://blogs.microsoft.co.il/pavely/2011/08/03/wpf-tip-using-a-mousedoubleclick-event-where-none-exists/):

<ContentControl MouseDoubleClick="OnDoubleClick">
  <Border Margin="10" BorderBrush="Black" BorderThickness="2">
    <Grid Margin="4">
        <Rectangle Fill="Red" />
        <TextBlock Text="Hello" FontSize="15" />
    </Grid>
  </Border>
</ContentControl>
person PScr    schedule 28.09.2015
comment
Спасибо за быстрый ответ, добавление элемента управления содержимым сработало как шарм! Могу ли я каким-либо образом понять, что Border не поддерживает событие MouseDoubleClick, кроме ручного поиска поддерживаемых событий для Border? Сама Visual Studio не давала мне никаких подсказок... - person Kerl; 28.09.2015
comment
Я думаю, вы можете увидеть события в окне дизайнера. В моем случае я узнал об этом, выполнив поиск чего-то вроде wpf border click-event, и я, вероятно, все равно попробовал бы это первым. Одна из проблем заключается в том, чтобы понять, что проблема связана с границей, а не с вашим кодом. - person PScr; 28.09.2015
comment
Умно, отлично работает для любого другого элемента пользовательского интерфейса, а не только для рамки. - person Nik; 05.03.2020