[我在Visual Studio 2008版本3.5 SP1上使用SilverLight,
我有一个小应用程序,它使用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
,并且用户选择了第一个,则绘制效果很好。然后,用户选择第二个,它也可以绘制。用户然后再次选择第一个,然后出现以下错误:
An unhandled exception ("Unhandled Error in Silverlight Application Code: 4004.
Category: ManagedRuntimeError,
Message: System ArgumentException: Value does not fall within the expected range.
如果我重写上面的Line
分配并放入new DoubleCollection {5, 5}
,则代码可以正常工作。当我逐步执行时,我还检查了所有值,它们似乎很好。我看不到代码在该行失败的任何原因。
我想使用StrokeDashArray
来从帮助器类中分配原因是为了可以在运行时自定义值。但是,目前还没有自定义操作发生,因此它与第一次分配和后续分配中分配给它的StrokeDashArray
完全相同,并且始终在第一次使用。
myHelperClass.StrokeDashArray[0]
和myHelperClass.StrokeDashArray[1]
中的值始终为5.0。任何人都知道这里发生了什么。
谢谢
[有关在Silverlight中使用StrokeDashArray
的一些已知错误,例如,您不能从后面的代码中将StrokeDashArray
分配给Style
。参见following blog post with a workaround。您可能需要在帮助程序类中使用DoubleCollection
而不是StrokeDashArray
。
((这是一个非常老的错误,最初是在SL2.0中报告的!)