2012-01-27 61 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