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

时间:2014-04-11 11:04:08

标签: c# wpf canvas mouseevent 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)时,在我点击墨迹的位置画一个正方形。然而,这并不起作用,只是绘制标准的笔划。此外,当我点击墨迹上的某处时,它不会将标签内容更新为当前位置坐标。

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鼠标按下事件处理程序中缺少某些内容以使上述情况发生?当我想要放置形状时,如何停止绘图?

1 个答案:

答案 0 :(得分:1)

在这种情况下,MouseDown事件无法正常工作,因为它是由InkCanvas处理的,并且没有被冒泡,所以请尝试以下解决方案:

予。使用AddHandler

  

将handlingEventsToo指定为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是隧道事件,并且在泡泡事件之前首先运行。