首页 > 解决方案 > 无效的 WPF 画布鼠标向上事件

问题描述

我试图创建一个截图功能,将“Canvas”背景设置为图片,按下并抬起鼠标绘制一个矩形,并捕获矩形内的内容,但我的鼠标向上事件总是无效。搜了各种资料试了,好像都无效

public Bitmap GetScreenSnapshot()
{
        try
        {
            System.Drawing.Rectangle rc = SystemInformation.VirtualScreen;
            var bitmap = new Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            using (Graphics memoryGrahics = Graphics.FromImage(bitmap))
            {
                memoryGrahics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, CopyPixelOperation.SourceCopy);
            }

            return bitmap;
        }
        catch (Exception)
        {
        }

        return null;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
        var screenSnapshot = GetScreenSnapshot();
        var bmp = ImageProcessing.ToBitmapSource(screenSnapshot);
        bmp.Freeze();

        Clipper clipper = new Clipper();
        clipper.bitmap = screenSnapshot;//将图片传过去
        clipper.Background = new ImageBrush(bmp);

        clipper.Show();
}

这里,我使用一个按钮在主窗口中创建一个Window(Clipper),并将得到的桌面图像提供给Canvas

<Window x:Class="MyOCR_WPF.Clipper"
    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:MyOCR_WPF"
    mc:Ignorable="d"
    Title="Clipper" Height="450" Width="800" WindowStyle="None" WindowState="Maximized" WindowStartupLocation="CenterScreen">
<Canvas x:Name="canvas" MouseMove="canvas_MouseMove" MouseDown="canvas_MouseDown" MouseUp="canvas_MouseUp" Focusable="True" Background="Transparent">
</Canvas>
它的鼠标向上事件总是无效的

标签: c#.netwpf

解决方案


  • 因为你在cancas上绘制了一个Rectangle,所以mouseup无效。当在Rectangle上触发mouseup时,cancas的mouseup不能被触发。
  • 我测试并发现 Cancas 上也没有 PreviewMouseUp。
  • 我对您的问题使用了不同的解决方案。

看法

<Grid>
    <Canvas x:Name="canvas"  Focusable="False" />
    <Border MouseMove="canvas_MouseMove" MouseDown="canvas_MouseDown" MouseUp="canvas_MouseUp" Background="Transparent"/>
</Grid>

推荐阅读