LinearGradientBrush.Clone() 之后的异常
本文关键字:异常 之后 Clone LinearGradientBrush | 更新日期: 2023-09-27 17:55:29
从克隆的 LinearGradientBrush 获取 InterpolationColors 属性时引发异常:
LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(100, 0), Color.White , Color.Black);
ColorBlend colorBlend = new ColorBlend();
colorBlend.Colors = new Color[] {Color.White, Color.Red, Color.Black};
colorBlend.Positions = new float[] { 0f, 0.5f, 1f };
brush.InterpolationColors = colorBlend;
ColorBlend colorBlend1 = brush.InterpolationColors;
LinearGradientBrush brushCopy2 = (LinearGradientBrush)brush.Clone();
ColorBlend colorBlend2 = brushCopy2.InterpolationColors;
从最后一行引发异常。
是的,给自己一个 ILSpy 的副本或使用另一种方式来挖掘源代码,这样的问题变得更加明显......
LinearGradientBrush
有一个叫做interpolationColorsWasSet
的私人布尔值
InterpolationColors
是一个调用_GetInterpolationColors();
的属性
这反过来又以
if (!this.interpolationColorsWasSet)
{
throw new ArgumentException(SR.GetString("InterpolationColorsCommon", new object[]
{
SR.GetString("InterpolationColorsColorBlendNotSet"),
""
}));
}
问题是Clone
使用其句柄复制基础 GDI 画笔,并且不努力设置此专用布尔值,因此即使插值颜色可能在基础 GDI 画笔中设置。您始终会收到此错误。