0

我使用以下代码,当我单击按钮时,它允许我设置大小并将正方形添加到 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;
}

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

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 鼠标按下事件处理程序中缺少什么来实现上述情况吗?当我想放置一个形状时,如何停止画笔?

4

1 回答 1

2

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

一、使用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)
{

}

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

于 2014-04-11T11:31:10.323 回答