我不知道如何使用XAML绘制箭头,目前还没有任何代码。
是否有人可以帮助我用XAML代码实现这个绘制?
谢谢您的帮助。
TextBlock
(http://xahlee.info/comp/unicode_arrows.html)。<TextBlock Text="➔" />
或者Path
(https://msdn.microsoft.com/en-us/library/system.windows.shapes.path%28v=vs.110%29.aspx)
<Path Stroke="Black" Data="M 10 0 L 16 4 L 10 8 M 0 4 L 16 4" />
也许这个工具对你有用 PathViewer
我只是手动设置一个点,然后通过眼睛调整它:
<Path Stretch="Fill" Fill="LimeGreen"
Data="M
0,115 95,115 //p1, p2 (when really use remove these comments)
65,90 85,90 //p3, p4
120,120 //p5
85,150 65,150 //p6, p7
95,125 0,125 //p8, p9
Z"
HorizontalAlignment="Center" Width="60" Height="60" />
您可以调整宽度/高度。基本上,p1,p2,p3,p4
和p6,p7,p8,p9
是对称的,并且Data
可以像这样省略描述和逗号:
Data="M 0 115 95 115 65 90 85 90 120 120 85 150 65 150 95 125 0 125 Z"
结果:
结果:
另外这里有一种方法可以旋转箭头,例如将另一个右箭头旋转180度,变成左箭头:
<Path Stretch="Fill" Fill="LimeGreen"
Data="M 0,110 70,110 45,90 75,90 120,120 75,150 45,150 70,130 0,130 Z"
HorizontalAlignment="Right" Width="30" Height="24" Margin="0,0,2,0"
RenderTransformOrigin=".5,.5">
<Path.RenderTransform>
<RotateTransform Angle="180" />
</Path.RenderTransform>
</Path>
<Canvas Width="75" Height="50">
<Line X1="0" Y1="25" X2="55" Y2="25" Stroke="#ffffff" StrokeThickness="20"/>
<Line X1="50" Y1="25" X2="50" Y2="25" Stroke="#ffffff" StrokeThickness="50" StrokeEndLineCap="Triangle"/>
</Canvas>
有一个很好的第三方库可以免费使用,它可以适用于需要箭头作为线段结尾的某些用例。
完整的代码太长了,无法在此处重现,但我已经在下面链接到了它。我找不到这个代码的其他存储库(例如Nuget、Github等)。
文章:Lines with Arrows, Charles Petzold, April 18, 2007, New York, N.Y.
简短摘录:
Arrowheads.zip文件包含一个演示程序和两个类,名为ArrowLine和ArrowPolyline,它们都是从Shape派生而来…
ArrowLine类从ArrowLineBase派生,通过定义X1、Y1、X2和Y2属性基本上复制了Line类;ArrowPolyline通过定义Points属性复制了Polyline类。
...
因为箭头基本上是线的一部分,所以它们受到影响所有影响线的属性的影响,例如Stroke、StrokeThickness、StrokeStartLineCap和StrokeLineJoin。如果将IsArrowClosed设置为true,则Fill属性会发挥作用;如果将Fill设置为与Stroke相同的画刷,则箭头看起来最正常。
上面提到的类是控件(用C#编写),可以从XAML中使用。简单的例子:
xmlns:p="clr-namespace:Petzold.Media2D;assembly=Arrowheads"
...
<p:ArrowLine
X1="0"
Y1="0"
X2="148"
Y2="0"
Canvas.Top="18"
Canvas.Left="26"
/>
示例输出:
(http://www.charlespetzold.com/blog/2007/04/Arrowheads.png)
请注意,Charles非常慷慨地提供了这段代码以供重复使用,如他在常见问题解答中所述:
我写和发布的所有代码都可以在您的软件项目中免费使用(无论是个人还是商业),没有任何限制。
(常见问题解答确实提到了一些出版物方面的限制,因此您应该完整阅读它)。