LinearGradientBrush未正确应用于TextBlock

时间:2016-10-25 15:20:19

标签: c# wpf gradient

这是脚本:

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);

以下是我得到的结果:

enter image description here

我真的不明白为什么渐变在行和文本块上的行为不一样,因为mappingmode设置为绝对。

编辑:

以下是b.SpreadMethod = GradientSpreadMethod.Repeat;的结果:

enter image description here

在这种情况下,渐变似乎表现正确(但在我的情况下,我仍然需要使用不重复的渐变)。

1 个答案:

答案 0 :(得分:0)

我相信你误解了LinearGradientBrush.EndPoint

请参阅文档here

您尝试使用EndPoint作为渐变结束的位置,与形式相对应,但EndPoint更像是渐变开始改变颜色的位置。

正如您在图像中看到的那样,每个对象中红色和黑色的比例是相同的,而不是过渡的绝对位置。