Подумав некоторое время, я нашел способ сделать это, объединив некоторые функции, которые я нашел в других проектах, но они использовали его для манипулирования изображениями. Я попытался с печатью, и, кажется, работает нормально.
Вот как это работает:
Получите базовый контейнер для содержимого печати, преобразованного в растровое изображение с помощью 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;
}