Silverlight アプリケーションから一連のラベルを印刷しています。データを構成するデータがデータベースから読み取られ、UI 要素がオンザフライで作成され、Canvas
レイアウト用に追加されます。ラベルはページ上にグリッド状に配置されます。行と列の数は、使用する用紙によって決まります。
要素を「打ち消す」ための行の追加を除いて、すべて正常に機能しています (たとえば、アイテムが販売されているときの元の価格)。
これは、行を生成するコードです。
var line = new Line { StrokeThickness = 2, Stroke = new SolidColorBrush(Colors.Black) };
line.X1 = 0;
line.SetBinding(Line.Y1Property, new Binding { ElementName = element.Name, Path = new PropertyPath("ActualHeight") });
line.Y2 = 0;
line.SetBinding(Line.X2Property, new Binding { ElementName = element.Name, Path = new PropertyPath("ActualWidth") });
// Insert the element straight after the element it's bound to
canvas.Children.Insert(canvas.Children.IndexOf(element) + 1, line);
line.SetValue(Canvas.TopProperty, element.GetValue(Canvas.TopProperty));
line.SetValue(Canvas.LeftProperty, element.GetValue(Canvas.LeftProperty));
// and make sure it's Z index is always higher
line.SetValue(Canvas.ZIndexProperty, (int)element.GetValue(Canvas.ZIndexProperty) + 1);
canvas
ラベルを表示するために使用されているキャンバスですelement
突き出す要素です (この場合は元の価格)。
- コードは、印刷されるすべてのラベルに対して呼び出されています。
- バインディングは一貫しています。
- バインディングをハードコードされた値に置き換えると、線が描画されるため、バインディングの何かが原因であるように見えます。でも:
- 「親」要素の
ActualHeight
andは、各ラベルで同じです。ActualWidth
- 線はプリントアウトの他の場所に描かれていません (私が見ることができます)。1 ページ目で出力を停止すると、行が表示されません。
- 他のすべてが表示され、正しい場所に表示されます。
私は何を逃したのですか?