WPF拍摄应用程序的屏幕截图,包括隐藏内容
在“技术限制”类别下: 我收到了在我的应用程序中有一个截图按钮的要求,该按钮将截图并启动打印机对话框。很公平。我的代码实现了这一点。我只需使用我的窗口,并使用RenderTargetBitmap来渲染窗口 但是,现在的要求是,它应该包括隐藏在滚动条后面的所有内容。这意味着,在屏幕截图中,应用程序应该看起来“拉伸”,以消除滚动条,并显示所有数据。例如,如果有一个大的列表或数据网格,所有的数据都应该是可见的 请记住,WPF可能是虚拟化的,而不是呈现不在视图中的东西,有什么方法可以实现这一要求吗?是否有可能将视觉树渲染到一个单独的无限空间并在那里截图?还有别的吗 回复评论:WPF拍摄应用程序的屏幕截图,包括隐藏内容,wpf,screenshot,Wpf,Screenshot,在“技术限制”类别下: 我收到了在我的应用程序中有一个截图按钮的要求,该按钮将截图并启动打印机对话框。很公平。我的代码实现了这一点。我只需使用我的窗口,并使用RenderTargetBitmap来渲染窗口 但是,现在的要求是,它应该包括隐藏在滚动条后面的所有内容。这意味着,在屏幕截图中,应用程序应该看起来“拉伸”,以消除滚动条,并显示所有数据。例如,如果有一个大的列表或数据网格,所有的数据都应该是可见的 请记住,WPF可能是虚拟化的,而不是呈现不在视图中的东西,有什么方法可以实现这一要求吗?是否
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");
}
}
屏幕截图按钮位于仅保存菜单的外壳上。在这个shell中,可以承载800多个视图中的任意一个。这些视图可以包含数据网格、列表、由文本框组成的大型表单。。。任何东西如果不在视觉树上行走,就无法分辨“内部”是什么
请求的功能类似于将浏览器中的网页打印为PDF。它还将为您提供整个DOM,而不仅仅是您在浏览器的有限视图中看到的内容。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>
它总是一个datagrid吗?您可以直接打印datagrid、listview或listbox,而不是截图,方法是使用窗口大小测量其大小,然后使用printvisual@FelixD. 不,这可以是任何东西。我们正在讨论一个800多个视图的应用程序。这可能是数据网格、列表视图、ItemsControl、由文本框组成的大型表单。。。屏幕截图按钮位于周围的外壳上。外壳中承载的视图可以是anything@UsmanAli这不仅仅是数据网格。无论应用程序外壳中有什么类型的屏幕或控件,它都应该工作。shell是一个宿主,可以承载任何类型的视图。shell没有关于其中包含哪种视图或控件的信息(除非它开始遍历可视化树),那么Viewbox呢,它可以实现您的目标吗?如果我没有弄错的话,这仍然会将结果的大小限制为一页,在您的度量中使用PrintableArea时,它将度量ScrollViewer中的大小。对于这个简单的示例,它是有效的,但对于实际应用程序不适用。仅仅因为scrollviewer可以是可视化树中的多个级别,也可以是多个scrollviewer,datagrids。。。或者可能有硬编码的MaxHeights。。。我将在“不可能”项下提交此要求。谢谢你的建议