在“技术限制”类别下:
我已收到要求在我的应用程序中具有一个屏幕截图按钮的要求,该按钮将获取屏幕截图并启动打印机对话框。很公平。我的代码实现了这一点。我只是拿起窗口,然后使用RenderTargetBitmap渲染窗口。
但是,需求现在表明它应该包括所有隐藏在滚动条后面的内容。意思是,屏幕快照中的应用程序应看起来“已拉伸”,以便消除滚动条并显示所有数据。例如,如果列表或数据网格很大,则所有数据都应该可见。
请记住,WPF可能是虚拟化的,而不是渲染看不见的东西,请问有什么方法可以实现此要求?是否有可能将可视树渲染到单独的无限空间并在其中进行屏幕截图?还有吗?
回复评论:
屏幕截图按钮位于仅容纳菜单的外壳上。在此外壳内,可以托管800多个视图。这些视图可以包含数据网格,列表,由文本框组成的大型表格……任何内容。如果不走视觉树,就无法说出“内部”是什么。
所需功能类似于在浏览器中将网页打印为PDF。它还将为您提供整个DOM,而不仅仅是您在浏览器的受限视图中看到的内容。
答案 0 :(得分:1)
XAML:
<Grid>
<Button
x:Name="btnPrint"
Width="50"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Click="BtnPrint_Click"
Content="Print" />
<ScrollViewer Height="500" HorizontalAlignment="Center">
<Grid x:Name="toPrint">
<!--your code goes here-->
</Grid>
</ScrollViewer>
</Grid>
C#:
private void BtnPrint_Click(object sender, RoutedEventArgs e)
{
var pdialog = new PrintDialog();
if (pdialog.ShowDialog() == true)
{
System.Windows.Size pageSize = new System.Windows.Size { Height = pdialog.PrintableAreaHeight, Width = pdialog.PrintableAreaWidth };
toPrint.Measure(pageSize);
toPrint.UpdateLayout();
pdialog.PrintVisual(toPrint, "Print");
}
}