c# - WPF Interaction.Triggers MouseDown EventTrigger 不适用于 Canvas 元素

标签 c# wpf xaml mvvm eventtrigger

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

Canvas 元素支持哪些事件?为什么 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>

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

  • 单击 - 如果我将它应用于 Canvas 内的 Button 元素,则可以使用
  • 鼠标按下
  • PreviewMouseDown - 使用 Button 元素
  • 鼠标左键按下
  • 预览LeftMouseButtonDown

最佳答案

鼠标事件不起作用,因为未设置 Canvas 的背景。 如果控件(在本例中是您的 Canvas)没有设置背景颜色,背景颜色将默认为 null,这会使控件无法进行 HitTest 。

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

关于c# - WPF Interaction.Triggers MouseDown EventTrigger 不适用于 Canvas 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38556603/

相关文章:

c# - 插入与更新

c# - F# - "self-filling"类型属性

c# - WPF XAML 在 ContentControl 中显示内容

c# - 防止 XAML/C# 中 ListView 的 Return(Enter)、向上和向下箭头键的默认行为 (Windows 10)

c# - 使用 WPF 为多个动态皮肤字典创建别名颜色定义

xaml - 我应该如何在 Windows 应用商店应用程序中显示带有绑定(bind)数据的格式化文本?

c# - Linq 语句中的正则表达式?

c# - 在 C# 中从数组中查找和删除项目

wpf - 如何从类库项目 (dll) 中的公共(public)静态方法显示 WPF 窗口

c# - 使用 System.IO.Compression 压缩完整文件夹