私はStrokeDashArrayで新しいラインを作成する小さなアプリケーションを持っている、のVisual Studio 2008、版3.5 SP1にラインオブジェクトの原因4004エラーにStrokeDashArrayの割り当て
をSilverlightを使用しています。私は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とユーザーが最初のものを選択していると言うと、それは上手く描く。ユーザーはそれから2番目のものを選択します。ユーザーが次に最初のものを選択し、次のエラーが表示されます。
未処理の例外上記の行の割り当てを書き換えて「new DoubleCollection {5、5}」に入れると、コードはうまく動作します。ステップスルーするとすべての値がチェックされ、完全にうまくいくように見えます。その行でコードが失敗する理由を確認してください。
なぜ私がStrokeDashArrayをヘルパークラスから割り当てたいのかは、実行中に値をカスタマイズできるようにするためです時間。しかし、現時点ではカスタマイズは行われていませんので、最初の割り当てとそれ以降の割り当てで割り当てられたのとまったく同じStrokeDashArrayであり、常に最初に動作します。
myHelperClass.StrokeDashArray [0]およびmyHelperClass.StrokeDashArray [1]の値は、常に5.0です。誰でもここで何が起こっているか考えてみてください。
おかげ
おかげで、それは代わりに文字列としてDoubleCollectionを割り当てるために助言を使用することによって修正さです。しかし、奇妙なことは、常に最初に動作し、まったく同じコードで再割り当てされた場合にのみ失敗することです。 – JohnCambell
ええ、それは非常に厄介なバグです。喜んで回避策はあなたのためにそれを修正しました。 – ColinE
@JohnCambellはupvote/upの回答を覚えています。どうもありがとう。 – ColinE