gpt4 book ai didi

c# - 使用 DrawingContext.DrawRectangle 绘制的矩形会阻塞鼠标

转载 作者:行者123 更新时间:2023-11-30 15:01:55 24 4
gpt4 key购买 nike

下面的 WPF 程序会显示一个如下所示的窗口:

enter image description here

黑色方 block 外的鼠标移动会导致窗口标题随鼠标位置更新。当鼠标进入正方形时停止更新。

我希望 MouseMove 继续触发,即使鼠标在正方形上也是如此。有办法做到这一点吗?

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace Wpf_Particle_Demo
{
class DrawingVisualElement : FrameworkElement
{
public DrawingVisual visual;

public DrawingVisualElement() { visual = new DrawingVisual(); }

protected override int VisualChildrenCount { get { return 1; } }

protected override Visual GetVisualChild(int index) { return visual; }
}

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

var canvas = new Canvas();

Content = canvas;

var element = new DrawingVisualElement();

canvas.Children.Add(element);

CompositionTarget.Rendering += (s, e) =>
{
using (var dc = element.visual.RenderOpen())
dc.DrawRectangle(Brushes.Black, null, new Rect(0, 0, 50, 50));
};

MouseMove += (s, e) => Title = e.GetPosition(canvas).ToString();
}
}
}

最佳答案

到目前为止,最简单的方法是使用窗口上的“隧道”事件 PreviewMouseDown。它首先被传送到窗口,然后在层次结构中向上移动。因此,窗口中还有哪些其他元素根本无关紧要。在代码中:

public partial class Window1 : Window {
public Window1() {
InitializeComponent();
this.PreviewMouseMove += new MouseEventHandler(Window1_PreviewMouseMove);
}
void Window1_PreviewMouseMove(object sender, MouseEventArgs e) {
this.Title = e.GetPosition(this).ToString();
}
}

关于c# - 使用 DrawingContext.DrawRectangle 绘制的矩形会阻塞鼠标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com