2011-01-13 4 views
0

からIは、XPS文書を印刷するDocumentToolkitを使用するコードのこのビットを有する:変換点CreatePageVisual有する別のキャンバス、及びTransformToVisual

保護オーバーライドのUIElement CreatePageVisual(のFixedPageのFixedPage、サイズmaxSizeの) { キャンバスページ=(キャンバス)base.CreatePageVisual(fixedPage、maxSize);

 foreach (Tuple<int, UIElement, int, int> t in AllFields.Where(f => f.Item1 == fixedPage.PageNumber)) 
     { 
      var clone = t.Item2.Clone(); 

      Canvas.SetLeft(clone, t.Item3 * 1.335); 
      Canvas.SetTop(clone, (790 - t.Item4) * 1.335); 
      page.Children.Add(clone); 
     } 
    } 

t.Item2とt.Item3は、Canvas上のUIElementsのX、Y座標です。これらの座標で完全に表示されますが、上記のオーバーライドを使用してドキュメントを印刷する場合は、UIElementsがキャンバス上に「ストレッチ」されています。左上の方が正解に近いですが、ページを横切ったり、ページを横切ったりすると間違っています。

私はTransformVisualを使用して座標を変換しようとしましたが、運:

 GeneralTransform generalTransform = t.Item2.TransformToVisual(page); 
     Point childToParentCoordinates = generalTransform.Transform(new Point(t.Item3 * 1.335, (790 - t.Item4) * 1.335)); 
     Canvas.SetLeft(clone, childToParentCoordinates.X); 
     Canvas.SetTop(clone, childToParentCoordinates.Y); 

私はエラーを取得していない、と私はそれが動作するかはわかりません。助言がありますか?

答えて

0

私はいくつかのことが間違っていたことが判明しました。まず、私のTransformToVisual(ページ)はTransformToVisual(page.Parent)でなければなりません。そして、最終的に私が持っていた本当の問題は、私のクローンをページの代わりにfixedPageに追加するべきだったということです。

私は、キャンバス内のキャンバスにテキストブロックを追加していました。私はTransformToVisualに修正しようとしましたが、そのすべてを削除して、代わりにfixedPageにアイテムを追加しました。

関連する問題