在对主题进行一些研究后,我没有找到任何东西,所以如果已经提出同样的问题,我很抱歉。
任务:当按下鼠标左键(如画笔中的画笔)时,在光标后的画布上制作彩色轨迹线。
问题:我认为使用System.Windows.Shapes.Path是执行此任务的最佳方法。下面的代码工作正常,除了一件事:如果你试图移动光标然后改变方向相反(例如,X轴上的值增加,然后减小,但Y轴上的值保持不变),你将得到Line的意外部分,对应于前一个方向。
我很抱歉纠结于我的问题,但我希望你能得到它。
为了让您更容易在机器上重现它,我正在添加解决方案。
如果我做错了,请指出我的错误!
C# 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用System.Text; 使用System.Threading.Tasks; 使用System.Windows; 使用System.Windows.Controls; 使用System.Windows.Data; 使用System.Windows.Documents; 使用System.Windows.Input; 使用System.Windows.Media; 使用System.Windows.Media.Imaging; 使用System.Windows.Navigation; 使用System.Windows.Shapes;
namespace WpfApplication3
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private Boolean Inserting;
private Path path;
private Boolean isFirstPoint;
public MainWindow()
{
InitializeComponent();
LolCanvas.IsHitTestVisible = true;
}
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (Inserting)
{
Point p = Mouse.GetPosition(LolCanvas);
if (isFirstPoint)
{
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(p.X + 5, p.Y + 5);
myPathFigure.Segments = new PathSegmentCollection();
(path.Data as PathGeometry).Figures.Add(myPathFigure);
isFirstPoint = false;
}
else
{
LineSegment myLineSegment = new LineSegment();
myLineSegment.Point = new Point(p.X + 5, p.Y + 5);
(path.Data as PathGeometry).Figures[0].Segments.Add(myLineSegment);
}
}
}
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
Inserting = true;
path = new Path();
path.Stroke = new SolidColorBrush(Colors.Red);
path.StrokeThickness = 50;
path.Data = new PathGeometry();
(path.Data as PathGeometry).Figures = new PathFigureCollection();
LolCanvas.Children.Add(path);
isFirstPoint = true;
}
private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
{
Inserting = false;
}
}
}
的Xaml:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="LolCanvas" MouseMove="Canvas_MouseMove" MouseDown="Canvas_MouseDown" MouseUp="Canvas_MouseUp" Background="Black">
</Canvas>
</Window>
链接到应用程序:http://ge.tt/99aSgyo/v/0?c
答案 0 :(得分:0)
显然这种行为对于路径来说是正确的。由于线部分之间的角度出现问题。它是180度,因此窗口无法在这个地方渲染Path。 我有两种方法可以击败它: 1)为每个线段将IsSmoothJoin属性设置为true。 2)当出现这种问题时,制作另一个Path对象