2010-10-03 1 views
1

У меня есть та же проблема, что и сформулированные в "Printing in Silverlight 4».
Чтобы обойти эту проблему, я попытался масштабироваться превратить корень моего визуального дерева перед печатью.Как клонировать структуру Silverlight визуального дерева

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; 
    } 

Теперь выше код правильно печатает с Silverlight визуалы уместиться на листе бумаги.

Сейчас проблема заключается в том, что LayoutRoot сама теперь масштабируется вниз на экране.
Вопрос в том, есть ли способ создать клон LayoutRoot перед применением преобразования масштаба?

Моя прогулка вокруг нанесения шкалы tranformation снова после печати, но я хотел бы знать, если есть способ клонировать дерево визуалов

ответ

1

Боже мой, спасибо за вопрос. У меня была такая же проблема, но я попытался сварить размеры контейнера (уже находящегося в визуальном дереве) в области печати, что делает работу не, так как требуется другой макет. ScaleTransform. работа здесь как только мгновенно.

Я в порядке с «работой вокруг», просто делая myContainer.ClearValue(FrameworkElement.RenderTransformProperty) в событии EndPrint. Попытка клонирования визуального дерева даст множество других проблем (у меня есть ленивый загрузочный контент и т. Д.).

+0

Спасибо, herzmeister. Я не думал о фактическом «выравнивании» значения контейнера. Это похоже на лучший подход, чем мое сохранение старого значения масштаба рендеринга, а затем его преобразование. – Sung

0

Проверьте эту link подробной информации о SilverLight клона объекта.

также просто другая идея использовала бы 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); 
+2

XamlWriter/Reader доступны только в WPF. – Sung

 Смежные вопросы

  • Нет связанных вопросов^_^