Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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
C# WPF中虚线的打印是否错误?_C#_Wpf_Printing_Lines - Fatal编程技术网

C# WPF中虚线的打印是否错误?

C# WPF中虚线的打印是否错误?,c#,wpf,printing,lines,C#,Wpf,Printing,Lines,根据打印机的分辨率,虚线具有不同的虚线计数。为什么它不独立于新闻部?我怎样才能修好它 var line = new Line(); line.Stroke = Brushes.Black; line.StrokeThickness = 1; line.X1 = line.Y1 = 100; line.X2 = line.Y2 = 200; line.StrokeDashArray = new DoubleCollection(new[] { 8.0 }); var dialog = new P

根据打印机的分辨率,虚线具有不同的虚线计数。为什么它不独立于新闻部?我怎样才能修好它

var line = new Line();
line.Stroke = Brushes.Black;
line.StrokeThickness = 1;
line.X1 = line.Y1 = 100;
line.X2 = line.Y2 = 200;
line.StrokeDashArray = new DoubleCollection(new[] { 8.0 });

var dialog = new PrintDialog();

if (dialog.ShowDialog() == true)
{
    Size pageSize = new Size(
        dialog.PrintableAreaWidth,  dialog.PrintableAreaHeight);

    line.Measure(pageSize);
    line.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height));

    dialog.PrintVisual(line, "description");
}

我已经使用了PrintVisual,但是您可以创建带有虚线的固定文档并使用PrintDocument。结果是一样的。

WPF天生对DPI的变化有响应,几乎每个控件(除非另有规定)都是矢量图形-我希望您的打印机足够聪明,能够解释这些矢量图形,而不是打印屏幕上的转储内容

根据我使用WPF的经验,至少有两种选择:

选项1-创建位图并打印它
您可以将WPF控件捕获为位图对象,而位图对象将完全不知道DPI的使用情况,然后将其作为常规打印。值得注意的是,生成的位图将根据生成系统的显示分辨率/缩放比例而有所不同&任何要捕获为位图的内容都必须在屏幕上可见(而不是在滚动框等屏幕外)

选项2-使您的应用程序DPI不受影响 您可能不想使用此选项,因为它会阻止在高分辨率显示器上缩放(可能有一种方法可以暂时实现这一点,只是为了打印,但是您的打印机可能会忽略此选项,因为它更像是一个用户界面的东西,我目前无法测试它),但它们都在一起


我不完全确定这些选项是否有效,因为我目前无法测试它们。如果可以的话,我会把这篇文章作为评论发表。祝你好运

我对为什么如此感兴趣:)关于选项1,我不能使用此建议,因为我将向量图形保存在FixedDocument中,然后作为XPS文件保存。对于任何页面大小,文件大小要更小,打印质量要相同,这一点很重要。关于选项2这种方式不适合我。对于选项1,您应该能够将位图插入到固定的文档中。我很好奇为什么选项2不适合你,如果你还不清楚为什么WPF应用程序首先是DPI响应的。由于人们使用的屏幕尺寸/分辨率范围很大,因此它们的响应速度很快。理论上,任何WPF应用程序在任何显示器上都应该看起来清晰、缩放正确。