2012-01-27 53 views
0

我使用的Visual Studio 2008,版本3.5 SP1的SilverLight,分配一个StrokeDashArray到行对象的原因4004错误

我有一个创建一个StrokeDashArray新线的小型应用程序。我创建了StrokeDashArray并将其存储在一个辅助类(与其他可重用的对象一起)中。该行分配如下:

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

有关于在Silverlight使用StrokeDashArray一些已知的bug,比如你不能在Style从代码隐藏指定StrokeDashArray。请参阅following blog post with a workaround。您可能必须在助手类中使用DoubleCollection而不是StrokeDashArray

(这是一个很老的bug,最初报道SL2.0!)

+0

谢谢,得到它现在使用奉劝分配DoubleCollection作为一个字符串,而不是固定的。但奇怪的是,为什么它总是第一次工作,并且只有在重新分配完全相同的代码时才会失败。 – JohnCambell 2012-01-27 12:27:53

+0

是的 - 这是一个非常讨厌的bug。很高兴解决方法为您解决了问题。 – ColinE 2012-01-27 12:30:05

+0

@JohnCambell记得起来upvote /接受答案。非常感谢。 – ColinE 2012-01-27 12:30:35

相关问题