wpf - 如何在 WPF 中创建具有不同颜色段的完全连接线?
问题描述
看看这张照片:
注意左边的线有一个干净的角落,而右边的线没有。这是我用来创建每个的 XAML:
<Canvas Margin="10">
<Polyline Stroke="Green" StrokeThickness="10">
<Polyline.Points>
<Point X="0" Y="0"/>
<Point X="30" Y="50"/>
<Point X="60" Y="0"/>
</Polyline.Points>
</Polyline>
<Line X1="100" Y1="0" X2="130" Y2="50" Stroke="Red" StrokeThickness="10"/>
<Line X1="130" Y1="50" X2="160" Y2="0" Stroke="Blue" StrokeThickness="10"/>
</Canvas>
显然,Polyline
处理角落很容易,但它不支持不同颜色的段,这是我需要的。创建单独的行解决了这个问题,但我失去了干净的角落。我需要能够用第 1 行的角创建一条线,但是用第 2 行的颜色。
我的实际应用是一个折线图,所以这些线是动态创建的,可以有几十个线段,每个线段的角度范围从 0 到 180 度。
我遇到的唯一解决方案是使用LinearGradientBrush
with Polyline.Stroke
,并在拐角处放置渐变停止。但是考虑到线的长度和每个线段都是完全可变的,并且梯度停止似乎是以百分比来衡量的(从一端的 0 到另一端的 1),它似乎计算起来会很痛苦并且脱落为一个过于复杂的解决方案。有没有更简单的方法来做到这一点?
解决方案
将线条笔划的起点和终点设置为圆形:
<Line X1="100" Y1="0" X2="130" Y2="50" Stroke="Red" StrokeThickness="10"
StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
<Line X1="130" Y1="50" X2="160" Y2="0" Stroke="Blue" StrokeThickness="10"
StrokeStartLineCap="Round" StrokeEndLineCap="Round"/>
推荐阅读
- entity-framework - Azure 数据库、EF、超时问题
- javascript - React Apollo 的 MockedProvider 模拟 refetch() 函数
- javascript - 在 vueJS 2 中具有分页但无法呈现的 element-ui 表行的背景颜色
- tsql - 返回字段的数量是否会影响 TVF 的性能?
- c# - 如何在代码中为规范流场景大纲标题获取自动生成的名称以用于报告目的
- ios - 如何从终端更新 Visual Studio for Mac / Xamarin Studio?
- session - Firebird 中 UDF 的会话特定存储
- javascript - mqtt async 等待并发消息然后响应相应的 http post 请求
- javascript - NodeJS 流 - 内存不足
- google-apps-script - 通过 Google 表单添加日历活动