如何用C#中的鼠标画线

时间:2013-04-24 14:56:25

标签: c# wpf mouse lines

我目前正试图在视觉工作室WPF形式中制作一个pragram,用画笔中的鼠标绘制线条。 目前它正在绘制相同的旧线并继续绘制它但我想每次按下鼠标左键时绘制一条新线。这是 MainWindows.xaml.cs 代码及其外观:

namespace DrawingLines
{

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private PathFigure _pathFigure = new PathFigure();
    PathFigureCollection _pathCollection = new PathFigureCollection();
    PathSegmentCollection _segments = new PathSegmentCollection();
    private PathGeometry _pathGeometry = new PathGeometry();

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _pathFigure.Segments = _segments;
        _pathCollection.Add(_pathFigure);
        _pathGeometry.Figures = _pathCollection;
        myPath.Data = _pathGeometry;
    }

    private void Window_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            LineSegment segment = new LineSegment();
            segment.Point = e.GetPosition(this);
            _pathFigure.Segments.Add(segment);
        }

    }

    private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        _pathFigure.StartPoint = e.GetPosition(this);
    }

    //private void Window_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    //{

    //}

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        this.Close();

    }
}

}

这是 MainWindow.xmal 代码:

<Window x:Class="DrawingLines.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Joonistamine" Height="350" Width="525" Loaded="Window_Loaded" MouseMove="Window_MouseMove" MouseLeftButtonDown="Window_MouseLeftButtonDown" MouseRightButtonDown="Window_MouseRightButtonDown">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="53*" />
        <RowDefinition Height="258*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="124*" />
        <ColumnDefinition Width="379*" />
    </Grid.ColumnDefinitions>
    <Path Stroke="Black" StrokeThickness="1" Name="myPath" Grid.ColumnSpan="2" Grid.RowSpan="2" />
    <Button Content="Exit" Height="25" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="46" Click="button1_Click" BorderBrush="Red" Foreground="#FFFF1A1A" />
</Grid>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

在我看来,您不断添加到PathSegment,而不是在开始新行时清除它(通过单击鼠标左键)。因此,我会尝试这个:

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    _pathFigure.Segments.Clear();
    _pathFigure.StartPoint = e.GetPosition(this);
}

编辑:...如果您希望它保留线条并且它们不一定是连接的,则每条线路需要一个单独的路径,因为每条路径代表一个连接的形状。

为此,您需要以这种方式修改代码:

  • 从XAML中删除路径
  • 每按一次鼠标左键,创建一个新路径并将其添加到网格中(myGrid.Children.Add(myPath)
  • 从鼠标移动到当前活动路径添加新点