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

问题描述 投票:0回答:1

[我在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);

包含行的对象在类数组中。根据用户选择的内容,它将在画布上绘制形状。假设我有myDrawing1myDrawing2,并且用户选择了第一个,则绘制效果很好。然后,用户选择第二个,它也可以绘制。用户然后再次选择第一个,然后出现以下错误:

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。任何人都知道这里发生了什么。

谢谢

c# .net silverlight
1个回答
1
投票

[有关在Silverlight中使用StrokeDashArray的一些已知错误,例如,您不能从后面的代码中将StrokeDashArray分配给Style。参见following blog post with a workaround。您可能需要在帮助程序类中使用DoubleCollection而不是StrokeDashArray

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

© www.soinside.com 2019 - 2024. All rights reserved.