将StrokeDashArray分配给Line对象会导致4004错误

时间:2012-01-27 09:35:27

标签: c# .net silverlight

我在Visual Studio 2008,Ver 3.5 SP1上使用SilverLight,

我有一个小应用程序,它使用StrokeDashArray创建一个新的Line。我创建了StrokeDashArray并将其存储在一个帮助器类中(与其他被重用的对象一起)。 Line的分配如下:

var myLine = new Line {X1 = myHelperClass.X,X2 = ...,Y1 = ... Y2 = ...,Fill = myHelperclass.Fill,StrokeThickness = myHelperclass.StrokeThickness,Stroke = myHelperClass.Stroke, StrokeDashArray = myHelperClass.StrokeDashArray};

_parenCanvas.Children.Add(MYLINE);

包含该行的对象位于类数组中。根据用户选择的内容,它将在画布上绘制形状。假设我有myDrawing1,myDrawing2和用户选择第一个,它绘制得很好。用户然后选择第二个,它也画得很好。然后用户再次选择第一个,我收到以下错误:

未处理的异常(“Silverlight应用程序代码中的未处理错误:4004。类别:ManagedRuntimeError,消息:系统ArgumentException:值不在预期范围内。

如果我重写上面的Line赋值并放入“new DoubleCollection {5,5}”,代码工作正常。当我单步执行时,我也检查了所有的值,它们看起来非常好。我看不出代码在该行上失败的原因。

我想使用从助手类分配StrokeDashArray的原因是可以在运行时自定义这些值。但是,目前没有定制发生,所以它与第一次和后续分配中分配给它的StrokeDashArray完全相同,并且它始终在第一次工作。

myHelperClass.StrokeDashArray [0]和myHelperClass.StrokeDashArray [1]中的值始终为5.0。任何人都知道这里发生了什么。

由于

1 个答案:

答案 0 :(得分:1)

在Silverlight中使用StrokeDashArray存在一些已知错误,例如,您无法从代码隐藏中为StrokeDashArray分配Style。请参阅following blog post with a workaround。您可能必须在助手类中使用DoubleCollection而不是StrokeDashArray

(这是一个很老的错误,最初是在SL2.0中报道的!)