1

我目前正在尝试以 Visual Studio WPF 形式制作一个程序,该程序使用鼠标绘制线条,就像在油漆中一样。目前它正在绘制相同的旧线并继续绘制它,但我想在每次按下鼠标左键时画一条新线。这是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>

我究竟做错了什么?

4

1 回答 1

2

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

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

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

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

  • 从 XAML 中删除路径
  • 对于每一次鼠标左键单击,创建一个新路径并将其添加到网格(myGrid.Children.Add(myPath)
  • 从鼠标移动到当前活动路径添加新点
于 2013-04-24T15:12:16.370 回答