-2

每次发生 MouseMove 事件时,我都会尝试在鼠标后面制作两条线。我可以为事件创建两条线,但问题是它们将为每个 MouseMove 创建两条线。这是我的代码。我正在使用 WPF 和 C#。

    private void CanvasMouseMove(object sender, MouseEventArgs e)
    {
        double xPos = e.GetPosition(m_Grid).X;
        double yPos = e.GetPosition(m_Grid).Y;

        Line vertLine = new Line();
        Line horzLine = new Line();

        vertLine.X1 = xPos;
        vertLine.Y1 = 0;
        vertLine.X2 = xPos;
        vertLine.Y2 = m_Grid.Height;

        horzLine.X1 = 0;
        horzLine.Y1 = yPos;
        horzLine.X2 = m_Grid.Width;
        horzLine.Y2 = yPos;

        vertLine.StrokeThickness = 1;
        horzLine.StrokeThickness = 1;

        vertLine.Stroke = Brushes.Black;
        horzLine.Stroke = Brushes.Black;

        m_Grid.Children.Add(vertLine); //m_Grid is my Canvas
        m_Grid.Children.Add(horzLine);

        m_Grid.UpdateLayout();
    }
4

2 回答 2

2

只是每次(也不要打电话,这不Clear关你的事)。Grid.ChildrenUpdateLayout

于 2012-07-11T20:35:16.753 回答
0

最好找到现有的线条,然后将其删除,这样如果您的画布中有任何其他内容,您将不会删除它,只有这些特定的线条。

你可以通过给他们一个名字然后用这个名字搜索他们来做到这一点。

private void CanvasMouseMove(object sender, MouseEventArgs e)
        {
            double xPos = e.GetPosition(m_Grid).X;
            double yPos = e.GetPosition(m_Grid).Y;

            Line vertLine = new Line
                                {
                                    Name = "vertLine",
                                    X1 = xPos,
                                    Y1 = 0,
                                    X2 = xPos,
                                    Y2 = m_Grid.Height,
                                    Stroke = Brushes.Black,
                                    StrokeThickness = 1
                                };

            Line horzLine = new Line
                                {
                                    Name = "horzLine",
                                    X1 = 0,
                                    Y1 = yPos,
                                    X2 = m_Grid.Width,
                                    Y2 = yPos,
                                    StrokeThickness = 1,
                                    Stroke = Brushes.Black
                                };

            m_Grid.Children.Remove((Line) m_Grid.Children.OfType<Line>().FirstOrDefault(x => x.Name == "vertLine"));
            m_Grid.Children.Remove((Line) m_Grid.Children.OfType<Line>().FirstOrDefault(x => x.Name == "horzLine"));

            m_Grid.Children.Add(vertLine); //m_Grid is my Canvas
            m_Grid.Children.Add(horzLine);

            m_Grid.UpdateLayout();
        }
于 2012-07-11T21:03:20.493 回答