WPF 在 CaptureMouse() 之后不发送 MouseMove 事件;

标签 wpf canvas mousemove

我正在尝试使用带有圆角矩形的 WPF Canvas ,我可以使用鼠标拖动它。但是,一旦我尝试在 Canvas 上捕获鼠标,我就不再获得移动事件。

这是一个“mycanvas”用户控件,矩形是“foo”用户控件。这些(减去序言)的 XAML 是:

mycanvas.xaml:

<Canvas MouseDown="CanvasMouseDown" MouseMove="CanvasMouseMove" MouseUp="CanvasMouseUp" Background="White">

    <my:Foo HorizontalAlignment="Left" Canvas.Left="97" Canvas.Top="30" x:Name="m_foo" VerticalAlignment="Top" Height="87" Width="128" />
</Canvas>

foo.xaml:
<Border BorderThickness="2" BorderBrush="Black" CornerRadius="15" Background="Plum">
    <Grid>
        <Label Content="Foo" Height="28" HorizontalAlignment="Left" Margin="6,6,0,0" Name="label1" VerticalAlignment="Top" />
    </Grid>
</Border>

然后处理程序是:
mycanvas.xaml.cs:
private void CanvasMouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.Source is Foo)
    {
        m_moving = e.Source as Foo;
        CaptureMouse();
        e.Handled = true;
    }
}

private void CanvasMouseMove(object sender, MouseEventArgs e)
{
    if (m_moving != null)
    {
        Canvas.SetLeft(m_moving, e.GetPosition(this).X);
        Canvas.SetTop(m_moving, e.GetPosition(this).Y);
    }
}

private void CanvasMouseUp(object sender, MouseButtonEventArgs e)
{
    ReleaseMouseCapture();
    m_moving = null;
}

MouseDown 触发,因此 CaptureMouse 被调用(并且可以工作,因为我不能再关闭应用程序或单击其中的任何其他内容!)但 MouseMove 再也不会被调用 - 那么 MouseMove 事件现在发送到哪里?

如果我 alt-tab 到另一个应用程序然后现在突然返回,则调用 MouseMove 并且 Foo 随鼠标移动。

最佳答案

尝试:

Mouse.Capture(this, CaptureMode.SubTree);

或者
m_moving.CaptureMouse();
...
if (m_moving != null)
{
    m_moving.ReleaseMouseCapture();
    m_moving = null;
}

鼠标事件是由 Foo 引发的,而不是由 Canvas 引发的,因此当您使用 Canvas 捕获鼠标时,您会阻止它们被引发。

关于WPF 在 CaptureMouse() 之后不发送 MouseMove 事件;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386392/

相关文章:

JavaScript - 缺失;声明之前

javascript - 在 mousemove 上播放视频时出现抽搐

c# - 在 Windows 窗体应用程序中的 bing map 上添加图钉

wpf - 如何在MVVM模式中验证ViewModel中的数据?

c# - Avalonedit 如何以编程方式更改文本背景

javascript - php代码为互联网上的两个客户端制作实时html Canvas

javascript - 如何聚合onMouse和onTouch,使canvas可以在鼠标和ipad上使用?

javascript - 通过将鼠标悬停在 D3.js 中的节点上来显示多个节点的工具提示

javascript - 当 Canvas 滚动到屏幕外时无法拖动 Canvas 中的对象

c# - WPF 应用程序文件关联 : DefaultIcon is not working