【问题标题】:WPF Interaction Trigger MouseDoubleClick event not firingWPF交互触发器MouseDoubleClick事件未触发
【发布时间】:2015-09-28 10:29:14
【问题描述】:

我在以下 .xaml 文件中有一个未正确触发的 MouseDoubleClick 事件:

<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 事件在这种情况下没有正确触发吗?

【问题讨论】:

    标签: c# wpf double mouseevent eventtrigger


    【解决方案1】:

    Border 没有MouseDoubleClick 事件,因为它不是控件。 有几种方法可以创建 MouseDoubleClickavailable。见Why doesn't WPF border control have a mousedoubleclick event?

    一种直接的方法是将边框包裹在ContentControl 中,这会引发MouseDoubleClickevent(来自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>
    

    【讨论】:

    • 感谢您的快速回复,添加内容控件就像一个魅力!除了“手动”查看支持的边框事件之外,我有什么方法可以实现边框不支持 MouseDoubleClick 事件? Visual Studio 本身并没有给我任何提示...
    • 我认为您可以在设计器窗口中看到事件。就我而言,我是通过搜索“wpf border click-event”之类的东西来发现它的,我可能仍然会先尝试一下。一个问题是意识到问题出在边框而不是您的代码。
    • 聪明,适用于任何其他 UI 元素,而不仅仅是边框。
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多