首页 > 解决方案 > WPF 行为 MouseDown 不触发

问题描述

我正在学习 Microsoft.Expression.Interactions.WPF。我正在尝试将行为附加到网格的 MouseDown 事件。该OnAttached方法被调用,但我的行为从未收到该MouseDown事件。

XAML

<Window x:Class="SequenceDiagramViewer.MainWindow"
        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:local="clr-namespace:SequenceDiagramViewer"
        xmlns:ineractivity="http://schemas.microsoft.com/expression/2010/interactivity"
        mc:Ignorable="d"
        Title="Sequence Diagram Viewer" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel />
    </Window.DataContext>
    <Grid>
        <ineractivity:Interaction.Behaviors>
            <local:MouseClick />
        </ineractivity:Interaction.Behaviors>
    </Grid>
</Window>

C#

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interactivity;
using System.Windows.Media;

namespace SequenceDiagramViewer
{
  public class MouseClick : Behavior<FrameworkElement>
  {
    protected override void OnAttached()
    {
      Console.WriteLine("OnAttached called");
      AssociatedObject.MouseDown += AssociatedObject_MouseDown;
    }

    private void AssociatedObject_MouseDown(object sender, MouseButtonEventArgs e)
    {
      Console.WriteLine("MouseDown called");
    }

    protected override void OnDetaching()
    {
      Console.WriteLine("OnDetaching called");
      AssociatedObject.MouseDown -= AssociatedObject_MouseDown;
    }
  }
}

在我的控制台输出中,我只得到OnAttached called. 此外,当我在 中放置断点时AssociatedObject_MouseDown,它永远不会被击中,但OnAttached会。我如何让事件发生在我的行为中?

标签: c#wpfexpression-blend-4

解决方案


我的网格背景是透明的。一旦我将网格 XAML 更改为:

<Grid Background="White">
    <interactions:Interaction.Behaviors>
        <local:MouseClick />
    </interactions:Interaction.Behaviors>
</Grid>

然后我开始获取鼠标按下事件。


推荐阅读