Как использовать предварительный просмотр Silverlight 4 Beta для печати?
-
21-09-2019 - |
Вопрос
Одной из функций Silverlight 4, перечисленных во многих документах PDC, является предварительный просмотр.
Я искал примеры того, как это использовать, и пока ничего не нашел.У кого-нибудь это уже заработало?Можете ли вы дать мне несколько советов о том, как реализовать простое веб-приложение с предварительным просмотром в.
Решение 3
Я думаю, что из-за отсутствия ответов и того факта, что, как указал Hurricanepkt в своем ответе, Тим Хойер и другие говорят о виртуальной печати, которая, если отображать то же самое на экране, может быть довольно легко встроена в вашу собственную функцию предварительного просмотра печати, указанную в некоторых списках, на самом деле люди неправильно истолковывают, что такое виртуальные документы для печати на самом деле.
Другие советы
Я не видел предварительного просмотра печати ни в одном из них, кроме реальной поддержки печати, в которой вы можете контролировать, какие элементы управления печатаются, и события, основанные на процессе печати.
После недолгих поисков я нашел способ сделать это, объединив некоторые функции, которые я нашел в других проектах, но они использовали это для манипулирования изображениями.Я попробовал с печатью, и, кажется, все работает нормально.
Вот как это работает:Преобразуйте базовый контейнер для содержимого печати в растровое изображение с помощью WriteableBitmap, здесь я использую Canvas:
WriteableBitmap wb = new WriteableBitmap(this.canvas1, null);
Используйте это растровое изображение в качестве источника для элемента управления изображением (может быть внутри ScrollViewer, что еще лучше).
this.imagePreview.Height = wb.PixelHeight;
this.imagePreview.Width = wb.PixelWidth;
this.imagePreview.Source = wb;
Установите базовые единицы масштабирования (в данном случае используется 1 процент).:
Point scale = new Point();
scale.X = imagePreview.Width/100d;
scale.Y = imagePreview.Height/100d;
Затем отрегулируйте масштабирование с помощью ползунка (необязательно).
private void vSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
imagePreview.Height = scale.Y * vSlider.Value;
imagePreview.Width = scale.X * vSlider.Value;
}