下面的 WPF 程序会显示一个如下所示的窗口:
黑色方 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/