当前位置: 首页 > 知识库问答 >
问题:

在inkcanvas C#WPF上的鼠标位置未绘制形状

百里骏
2023-03-14

我使用以下代码在inkcanvas上的鼠标位置绘制一个正方形。但它不会在鼠标位置的中心绘制形状,而是稍微向右,再低一些,如下图所示:

此外,当我点击向画布添加形状时,我想停止笔的绘制。

怎样才能正确定位,停止画笔呢?

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;
}

private Stroke NewRectangle(double dTop, double dLeft, double dWidth, double dHeight)
{
    double T = dTop;
    double L = dLeft;
    double W = dWidth;
    double H = dHeight;

    StylusPointCollection strokePoints = new StylusPointCollection();
    strokePoints.Add(new StylusPoint(L, T));
    strokePoints.Add(new StylusPoint(L + W, T));
    strokePoints.Add(new StylusPoint(L + W, T + H));
    strokePoints.Add(new StylusPoint(L, T + H));
    strokePoints.Add(new StylusPoint(L, T));

    Stroke newStroke = new Stroke(strokePoints);
    return newStroke;
}

private void inkCanvas_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    if (tool == 3) // shape tool
    {
        switch (chosenShape)
        {
            case "square":
                Stroke oS = NewRectangle(pY, pX, size, size);

                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;
        }
    }
}

共有1个答案

翟新
2023-03-14

在您的代码中,这指的是窗口?

// Get the x and y coordinates of the mouse pointer.
System.Windows.Point position = e.GetPosition(this);

如果是,则位置是相对于窗口而不是相对于inkCanvas的光标位置

尝试

System.Windows.Point position = e.GetPosition(inkCanvas);

如果您想在选择工具时停止画布绘图,您可以切换其IsEnable属性。

 类似资料:
  • 我在画布上处理鼠标事件时遇到问题。我想用鼠标来绘制它,我已经想出了这些事件处理程序,但当我开始绘制时,它们什么都不做。 你能帮我告诉我遗漏了什么或者如何重写它以便它开始工作吗?

  • 我是WPF的新手。 我想在Canvas上的鼠标移动事件上画一个圆圈。我已经编写了在画布上拖动它的逻辑。但是我想在鼠标点击我的画布时创建一个圆圈,它应该根据鼠标在画布上的移动来调整大小。 我怎样才能做到这一点? 这是我的代码

  • 问题内容: 如标题所示,我很难在JApplet中绘制一些矩形(填充的)。确切的目标是拥有一张50x50的表格,并在您 点击目标单元格时将其填充(可以通过绘制一个填充的矩形来完成)。我已经完成了有关起点坐标的数学运算, 但是由于某些原因,我无法在MouseClicked方法中绘制新矩形。有什么建议? 问题答案: 这是一个相对简单的概念(没有冒犯性)。 首先,请勿将代码与JApplet和混合使用JFr

  • 我目前有以下的类: 老实说,代码并不重要,请相信我,当用户将鼠标悬停在我的< code>Item对象上时,它会显示一个弹出窗口,如下所示: 这个弹出窗口在我的屏幕中间打开。如果我移动窗口,弹出窗口将在同一位置打开。我需要我的弹出窗口以某种方式在鼠标指针下打开。我知道具有此功能(据称),但我已经致力于设计这个,它具有我的许多设计目标。 这有可能让显示在某个位置吗? 谢谢。

  • 我使用以下代码来设置大小,并在单击按钮时将正方形添加到inkcanvas。它将形状添加到画布的左上角。我希望能够在画布上单击鼠标的位置将形状添加到画布。 当前我获得鼠标位置: 选择“shape”工具(工具==3)后,在单击inkcanvas的位置绘制一个正方形。但是,这不起作用,只绘制一个标准笔划。此外,当我单击inkcanvas上的某个位置时,它不会将标签内容更新为当前位置坐标。 是选择的工具,

  • 问题内容: 我想使用鼠标在HTML画布上绘制(例如:绘制签名,绘制名称…) 请帮我怎么办?请提供一些源代码。谢谢 问题答案: 这是一个工作示例。