c# - 无效的 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>
它的鼠标向上事件总是无效的
解决方案
- 因为你在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>
推荐阅读
- scala - 将两个列表与一个不同的元素组合在一起
- php - Laravel如何自动获取数组ID
- angular - Angular 如何使用 combineLatest 组合来自网站 url 栏的路由和查询
- npm - 如何在创建新的 Angular 8 项目时修复此 json 错误
- java - Drools 在 camelCase 中查找 Java 类,引发 NoClassDefFoundError
- c++ - C ++管理大量图像缓冲区
- objective-c - 为什么 setTitleEdgeInsets 在 iOS 13 中不起作用?目标 - C
- uno-platform - GetFileFromApplicationUriAsync、CopyAsync、AsStreamForRead 未在 Uno 平台中实现。解决方法?
- php - 如何以编程方式更新 Prestashop 产品状态?
- ubuntu - 如何指定用户定义的存档目录以运行“apt install ./
"