使用CreatePageVisual和TransformToVisual将点从一个画布转换为另一个画布

时间:2011-01-13 15:05:59

标签: c# silverlight

我有一些使用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);

我收到错误,我不确定它是否有效。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

事实证明我有几个错误。首先我的TransformToVisual(页面)应该是TransformToVisual(page.Parent)。最终我遇到的真正问题是我应该将我的克隆添加到fixedPage而不是page。

基本上我是将我的文本块添加到画布内的画布上。我尝试使用TransformToVisual来修复它,但我最终删除了所有这些并将我的项目添加到fixedPage。