C# 为什么将LinearGradientBrush.WrapMode设置为钳制会失败,并出现ArgumentException(“参数无效”)?

C# 为什么将LinearGradientBrush.WrapMode设置为钳制会失败,并出现ArgumentException(“参数无效”)?,c#,winforms,windows-7,C#,Winforms,Windows 7,下面是一个例子: public MainForm() { InitializeComponent(); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,100,100),Color.Blue, Color.White,angle:0); brush.WrapMode = WrapMode.Tile; // OK brus

下面是一个例子:

public MainForm()
    {
        InitializeComponent();

          LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0,0,100,100),Color.Blue, Color.White,angle:0);
          brush.WrapMode = WrapMode.Tile; // OK
          brush.WrapMode = WrapMode.Clamp; // Causes Unhandled exception alert, offering break
    }
在VS2008输出窗口中显示:

System.Drawing.dll中发生类型为“System.ArgumentException”的首次意外异常 其他信息:参数无效

(图)

这是在Windows7上

这里的文档

确认LinearGradientBrush.WrapMode接受WrapMode

“获取或设置一个WrapMode枚举,该枚举指示此文件的包装模式 LinearGradientBrush。“

还有这个

确认WrapMode.Clamp对渐变有效:


“钳制纹理或渐变未平铺。”

我可以通过Windows 8.1上的VS2015确认这一点

对我来说,这看起来像是一个bug,因为
钳制
即,使用untiled continuation,最后一种颜色可能非常有用

您可以尝试使用
InterpolationColors
解决问题,但这需要一些填充尺寸的知识

有关使用
InterpolationColors


更新:Lars的想法看起来也很有趣:用
LinearGradientBrush
创建一个平铺,然后将其与
TextureBrush
一起使用。

对于我来说,使用
SetInterpolationColor
(C++)缩放向量并重复结束颜色效果很好。我在两端留出一个10*VectorSize的空间,并对停止点进行规格化


我可以通过W8.1上的VS15确认这一点。这看起来像是一个bug,因为
climp
ie不间断延续,最后一种颜色可能会非常有用。您可以尝试使用
InterpolationColors
解决问题,但这需要一些填充尺寸的知识。谢谢。请输入您的回答,以便我可以接受。这是一个奇怪的错误。您可以尝试创建LinearGradientBrush的位图平铺,然后在TextureBrush中使用该位图,当其WrapMode设置为钳制时不会引发错误。