如何使用MouseDown事件WPF在鼠标位置向InkCanvas添加形状

本文关键字:InkCanvas 添加 位置 鼠标 MouseDown 何使用 事件 WPF | 更新日期: 2023-09-27 17:57:50

我使用以下代码,该代码允许我设置大小,并在单击按钮时将正方形添加到墨迹画布中。它将形状添加到画布的左上角。我希望能够在画布上单击鼠标的位置将形状添加到画布中。

目前我得到的鼠标位置:

private void inkCanvas_MouseMove(object sender, MouseEventArgs e)
{
    cursorCoords.Content = Mouse.GetPosition(Application.Current.MainWindow);
    // Get the x and y coordinates of the mouse pointer.
    System.Windows.Point position = e.GetPosition(this);
    pX = position.X;
    pY = position.Y;
}

选择形状工具(工具==3)后,在我单击墨迹画布的位置绘制一个正方形。然而,这不起作用,只是画一个标准的笔画。此外,当我单击墨迹画布上的某个位置时,它不会将标签内容更新为当前位置坐标。

private void inkCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (tool == 3)
    {
        coordstest.Content = pX + '-' + pY;
        switch (chosenShape)
        {
            case "square":
                Stroke oS = NewRectangle(pY, pX, size * 4, size * 4);
                DrawingAttributes attribs = new DrawingAttributes();
                attribs.Color = shapeColour;//Colors.LimeGreen;
                attribs.Height = 5.0;
                attribs.Width = 5.0;
                attribs.FitToCurve = false;
                oS.DrawingAttributes = attribs;
                inkCanvas.Strokes.Add(oS);
                break;
        }
    }
}

tool是所选的工具,以1、2或3的形式存储在一个字节中,用于笔、背景颜色和形状。shapeChosen是一个字符串,会有正方形、星形、圆形、三角形的选项。

我在inkcanvas鼠标向下事件处理程序中是否缺少一些东西来实现上述操作?当我想放置形状时,如何停止钢笔画?

如何使用MouseDown事件WPF在鼠标位置向InkCanvas添加形状

在这种情况下,MouseDown事件不起作用,因为它由InkCanvas处理,并且没有冒泡,所以尝试以下解决方案:

I。使用AddHandler:

将handledEventsToo指定为true,以便为已被事件路由中的另一个元素标记为已处理的路由事件调用所提供的处理程序。

示例:

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    MyInkCanvas.AddHandler(InkCanvas.MouseDownEvent, new MouseButtonEventHandler(InkCanvas_MouseDown), true);
}
private void InkCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
}

II。请尝试使用PreviewMouseDown而不是MouseDown,因为PreviewMouseDown是隧道事件,并且在气泡事件之前先运行。