2016-07-24 10 views
1

ウィンドウ内に矩形を描くことができるMVVM WPFアプリケーションを作成しようとしています。今、私は画面全体をカバーするキャンバス要素を作成しました。他の質問やガイドに続いて、マウスイベントでコマンドバインディングを使用する唯一の方法(たとえばMouseDown,MouseUpなど)は、System.Windows.Interactivityアセンブリを使用し、マウスイベントに対してEventTriggersを追加することです。しかし、これはcanvas要素では機能していないようです。クリック、クリック/ホールド、クリック/ドラッグ、右クリック、いずれも私のコマンドのExecuteメソッドを起動しません。WPF Interaction.Triggers MouseDown Canvas要素で動作しないEventTrigger

キャンバス要素でサポートされるイベントは何ですか? MouseDownまたはPreviewMouseDownが動作しないのはなぜですか?

  • クリックして - 私は内部Button要素に適用した場合に動作します:ウィンドウの

    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要素で動作します
  • キャンバスの背景が設定されていないので、210
  • のMouseLeftButtonDown
  • PreviewLeftMouseButtonDown

答えて

3

マウスイベントが動作していません。 コントロール(この場合はCanvas)に背景色が設定されていない場合、背景色はデフォルトでnullになり、コントロールがヒットテスト不能になります。

背景は、明示的にまたはスタイルを使用して設定することができ、値がnull(「透明」の場合もあります)と異なる限り、マウスイベントを取得する必要があります。

+0

うん、それは動作します!どういうわけか、私はウィンドウに背景を設定してから、それが適用されたとは思わなかった。 –

+0

これはやや直感的な操作のようです。良い答え –

関連する問題