2016-07-24 25 views
1

我試圖創建一個MVVM WPF應用程序,允許我在窗口中繪製一個矩形。現在,我創建了一個覆蓋整個屏幕的畫布元素。遵循其他問題和指南,它看起來像在鼠標事件上使用命令綁定的唯一方式(如MouseDown,MouseUp等)是使用System.Windows.Interactivity程序集併爲鼠標事件添加EventTriggers。但是,這似乎並不適用於canvas元素。單擊,單擊/按住,單擊/拖動,單擊右鍵,它們都不會觸發我的命令的執行方法。WPF Interaction.Triggers MouseDown EventTrigger不能使用畫布元素

畫布元素支持哪些事件?爲什麼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

回答

3

鼠標事件不工作,因爲畫布的背景未設置。 如果一個控件(在這種情況下你的Canvas)沒有設置背景色,背景顏色將默認爲null,並且這使得控件不可檢測。

可以明確或通過樣式設置背景,只要它具有與null(甚至是「透明」)不同的值,它應該拾取鼠標事件。

+0

是的,那工作!不知何故,我不認爲這是適用的,因爲我在窗口上設置了背景。 –

+0

這似乎是一個相當不直觀的操作。雖然答案很好 –