【问题标题】:How do I add shape to InkCanvas at mouse position using MouseDown event WPF如何使用 MouseDown 事件 WPF 在鼠标位置向 InkCanvas 添加形状
【发布时间】:2014-04-11 11:04:07
【问题描述】:

我使用以下代码,当我单击按钮时,我可以设置大小并将正方形添加到 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)在我点击indcanvas的位置绘制一个正方形。然而,这不起作用,只是画一个标准的笔划。此外,当我单击 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 鼠标按下事件处理程序中缺少什么来实现上述情况吗?当我想放置一个形状时,如何停止画笔?

【问题讨论】:

    标签: c# wpf canvas mouseevent inkcanvas


    【解决方案1】:

    在这种情况下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 是隧道事件,并且他在气泡事件之前首先运行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多