我有一些使用DocumentToolkit打印XPS文档的代码:
protected override UIElement CreatePageVisual(FixedPage fixedPage,Size maxSize) { Canvas page =(Canvas)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);
}
}
I.Item2和t.Item3是画布上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 :(得分:0)
事实证明我有几个错误。首先我的TransformToVisual(页面)应该是TransformToVisual(page.Parent)。最终我遇到的真正问题是我应该将我的克隆添加到fixedPage而不是page。
基本上我是将我的文本块添加到画布内的画布上。我尝试使用TransformToVisual来修复它,但我最终删除了所有这些并将我的项目添加到fixedPage。