WPF Interaction.Triggers MouseDown EventTrigger不使用Canvas元素

时间:2016-07-24 20:44:39

标签: c# wpf xaml mvvm eventtrigger

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

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>

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

  • 点击 - 如果我将其应用于画布内的Button元素
  • ,则有效
  • 的MouseDown
  • PreviewMouseDown - 使用Button元素
  • 的MouseLeftButtonDown
  • PreviewLeftMouseButtonDown

1 个答案:

答案 0 :(得分:5)

鼠标事件不起作用,因为画布的背景未设置。 如果控件(在这种情况下,您的Canvas)没有设置背景颜色,则背景颜色将默认为null,这使得控件不可命中测试。

可以明确地或通过样式设置背景,只要它的值不同于null(即使&#39;透明&#39;),它应该拾取鼠标事件。