这是脚本:
Canvas canvas = new Canvas();
TextBlock t = new TextBlock();
t.Text = "a very very very very very very long test";
t.FontSize = 28;
t.FontWeight = FontWeights.Bold;
t.Width = 500;
Canvas.SetLeft(t, 100);
Canvas.SetTop(t, 100);
Line l = new Line();
l.X1 = 100;
l.Y1 = 100;
l.X2 = 200;
l.Y2 = 100;
l.StrokeThickness = 2.0;
LinearGradientBrush b = new LinearGradientBrush(Colors.Red, Colors.Black, 0);
b.MappingMode = BrushMappingMode.Absolute;
b.StartPoint = new Point(100, 0);
b.EndPoint = new Point(200, 0);
l.Stroke = b;
t.Foreground = b;
canvas.Children.Add(l);
canvas.Children.Add(t);
以下是我得到的结果:
我真的不明白为什么渐变在行和文本块上的行为不一样,因为mappingmode设置为绝对。
编辑:
以下是b.SpreadMethod = GradientSpreadMethod.Repeat;
的结果:
在这种情况下,渐变似乎表现正确(但在我的情况下,我仍然需要使用不重复的渐变)。
答案 0 :(得分:0)
我相信你误解了LinearGradientBrush.EndPoint
请参阅文档here
您尝试使用EndPoint
作为渐变结束的位置,与形式相对应,但EndPoint
更像是渐变开始改变颜色的位置。
正如您在图像中看到的那样,每个对象中红色和黑色的比例是相同的,而不是过渡的绝对位置。