Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF拍摄应用程序的屏幕截图,包括隐藏内容_Wpf_Screenshot - Fatal编程技术网

WPF拍摄应用程序的屏幕截图,包括隐藏内容

WPF拍摄应用程序的屏幕截图,包括隐藏内容,wpf,screenshot,Wpf,Screenshot,在“技术限制”类别下: 我收到了在我的应用程序中有一个截图按钮的要求,该按钮将截图并启动打印机对话框。很公平。我的代码实现了这一点。我只需使用我的窗口,并使用RenderTargetBitmap来渲染窗口 但是,现在的要求是,它应该包括隐藏在滚动条后面的所有内容。这意味着,在屏幕截图中,应用程序应该看起来“拉伸”,以消除滚动条,并显示所有数据。例如,如果有一个大的列表或数据网格,所有的数据都应该是可见的 请记住,WPF可能是虚拟化的,而不是呈现不在视图中的东西,有什么方法可以实现这一要求吗?是否

在“技术限制”类别下:

我收到了在我的应用程序中有一个截图按钮的要求,该按钮将截图并启动打印机对话框。很公平。我的代码实现了这一点。我只需使用我的窗口,并使用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。。。我将在“不可能”项下提交此要求。谢谢你的建议