WPF交互.触发MouseDown事件触发器无法使用Canvas元素

本文关键字:Canvas 元素 触发器 交互 触发 MouseDown 事件 WPF | 更新日期: 2023-09-27 17:58:35

我正在尝试创建一个MVVM WPF应用程序,该应用程序允许我在窗口中绘制一个矩形。现在,我已经创建了一个覆盖整个屏幕的画布元素。根据其他问题和指南,对鼠标事件(如MouseDownMouseUp等)使用命令绑定的唯一方法似乎是使用System.Windows.Interactivity程序集并为鼠标事件添加EventTriggers。然而,这似乎不适用于canvas元素。单击、单击/按住、单击/拖动、右键单击,它们都不会触发我的命令的Execute方法。

画布元素支持哪些事件?为什么MouseDownPreviewMouseDown不起作用?

窗口的XAML:

<Window x:Class="RutheniumReader.SnippingWindow.SnippingShade"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:snippingWindow="clr-namespace:MyApp.SnippingWindow"
    mc:Ignorable="d"
    Title="Snipping Window"
    WindowState="Maximized"
    Background="Black"
    >
    <Window.DataContext>
        <snippingWindow:SnippingWindowViewModel />
    </Window.DataContext>
    <Canvas x:Name="Canvas">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDown">
                <i:InvokeCommandAction Command="{Binding Path=MouseDownCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Canvas>
</Window>

出于测试目的,我尝试了以下事件,但没有成功:

  • 单击-如果我将其应用于画布内的Button元素,则会起作用
  • MouseDown
  • PreviewMouseDown-使用Button元素
  • 鼠标左键向下
  • 预览鼠标左键向下

WPF交互.触发MouseDown事件触发器无法使用Canvas元素

鼠标事件无法工作,因为画布的背景没有设置。如果控件(在本例中为Canvas)没有设置背景色,则背景色将默认为null,这将使控件不可测试。

背景可以显式设置,也可以通过样式设置,只要它的值不同于null(甚至是"透明"),它就应该拾取鼠标事件。