代码之家  ›  专栏  ›  技术社区  ›  dance2die

如何克隆Silverlight可视化树结构

  •  1
  • dance2die  · 技术社区  · 15 年前

    我有同样的问题 "Printing in Silverlight 4

        void document_PrintPage(object sender, PrintPageEventArgs e)
        {
            var renderScale = 1.0D;
            if (LayoutRoot.ActualWidth > e.PrintableArea.Width)
                renderScale = e.PrintableArea.Width/LayoutRoot.ActualWidth;
    
            var scaleTransform = new ScaleTransform();
            scaleTransform.ScaleX *= renderScale;
            scaleTransform.ScaleY *= renderScale;
    
            e.PageVisual = LayoutRoot;
            e.PageVisual.RenderTransform = scaleTransform;
        }
    

    现在的问题是 LayoutRoot 它本身现在在屏幕上被缩小了。
    问题是,有没有办法让我复制 布局 在应用缩放变换之前?

    我四处走走是在打印后再次应用比例转换,但我想知道是否有一种方法可以克隆可视化树

    2 回复  |  直到 9 年前
        1
  •  1
  •   herzmeister    15 年前

    天哪,谢谢你的提问。我也有同样的问题,但是我试着把一个容器(已经在可视化树中)的尺寸设置为可打印区域,这是真的 工作,因为另一个布局通行证似乎是必需的。 ScaleTransform 不管怎样,马上在这里工作。

    我只需要做一个 myContainer.ClearValue(FrameworkElement.RenderTransformProperty) EndPrint

        2
  •  0
  •   Vinay B R    15 年前

    看看这个 link

    另外一个想法是使用xamlreader/writer读取xaml字符串并创建可视化树工作的内存副本。

    如果您的xaml有一个名为originalbutton的按钮,那么使用下面的代码,您将在readerLoadButton中获得该按钮的副本

    // Save the Button to a string.
    string savedButton = XamlWriter.Save(originalButton);
    
    // Load the button
    StringReader stringReader = new StringReader(savedButton);
    XmlReader xmlReader = XmlReader.Create(stringReader);
    Button readerLoadButton = (Button)XamlReader.Load(xmlReader);