A行到B行是初始行(填充黑色)。我正在使用
绘制它Rectangle = System.Windows.Shapes.Rectangle
我需要将从A1点到B点的相同直线用红色部分着色(如图所示)。
我怎么能从代码背后实现呢?
注意:我没有在这里重新创建(重新绘制)线条的奢侈。我只需要对现有的线进行部分着色,并根据其他条件进行操作,我可能需要将其恢复为黑色。
答案 0 :(得分:4)
要创建一个简单的双色渐变,您需要在同一位置添加两个渐变停顿,以确保颜色不会慢慢从一个渐变到另一个。下面的帮助程序类演示了它的工作原理:
public static class GradientGenerator
{
public static Brush GenerateTwoColorBrush(Color color1, Color color2, double ratio)
{
GradientStopCollection collection = new GradientStopCollection();
collection.Add(new GradientStop(color1, 0));
collection.Add(new GradientStop(color1, ratio));
collection.Add(new GradientStop(color2, ratio));
collection.Add(new GradientStop(color2, 1.0));
LinearGradientBrush brush = new LinearGradientBrush(collection);
return brush;
}
}
在您的代码隐藏中,您可以简单地调用生成器的方法以指定的比例(0.0
- 1.0
)获取两种颜色的渐变:
rectBlack.Fill = GenerateTwoColorBrush(Colors.Black, Colors.Red, 0.5);
如果您需要水平或倾斜渐变,只需设置StartPoint
的{{1}}和EndPoint
属性。
预期结果:
如果您决定采用更多MVVM-ish方法,或者在XAML中创建树,您只需使用此方法LinearGradientBrush
即可自动更新画笔。
IValueConverter
以上例子是这样做的:
public class RatioToGradientConverter : IValueConverter
{
public Color Color1 { get; set; }
public Color Color2 { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double ratio = 0;
if (value is double)
ratio = (double) value;
return GradientGenerator.GenerateTwoColorBrush(Color1, Color2, ratio);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
答案 1 :(得分:2)
你可以在LinearGradientBrush
的帮助下实现这一点,即在你的资源中定义画笔并使用它。
Tip: How to use a LinearGradientBrush
下面是MSDN的示例代码格式,即Rectangle,但您可以使用相同的笔刷编码。
Rectangle diagonalFillRectangle = new Rectangle();
diagonalFillRectangle.Width = 200;
diagonalFillRectangle.Height = 100;
// Create a diagonal linear gradient with four stops.
LinearGradientBrush myLinearGradientBrush =
new LinearGradientBrush();
myLinearGradientBrush.StartPoint = new Point(0,0);
myLinearGradientBrush.EndPoint = new Point(1,1);
myLinearGradientBrush.GradientStops.Add(
new GradientStop(Colors.Yellow, 0.0));
myLinearGradientBrush.GradientStops.Add(
new GradientStop(Colors.Red, 0.25));
myLinearGradientBrush.GradientStops.Add(
new GradientStop(Colors.Blue, 0.75));
myLinearGradientBrush.GradientStops.Add(
new GradientStop(Colors.LimeGreen, 1.0));
// Use the brush to paint the rectangle.
diagonalFillRectangle.Fill = myLinearGradientBrush;
答案 2 :(得分:0)
您可能还想考虑以下想法:
将矩形分成两部分,这意味着最后你将A从A1渲染为黑色,而第二个从A1到B以红色绘制。