我目前正在开发一个应用程序,用户可以在其中动态创建/移动画布上的TextBlocks。一旦将TextBlocks放置在所需位置,就可以按打印按钮,这将使ZPL打印机打印当前在屏幕上显示的内容。
通过从每个TextBlock中获取以下值来构建ZPL命令:
XPosition = Canvas.Left
YPosition = Canvas.Right
文字=文字
但是我找不到一种使打印输出类似于屏幕显示的方法。我猜这是因为Canvas.Left和Canvas.Right的值与打印机DPI不匹配。
这是我当前正在使用的转换(因为我认为Canvas.Left = 1表示1/96英寸)(画布的左上角是0,0)
public double GetZplXPosition(UIElement uiElement)
{
int dpiOfPrinter = 300;
double zplXPosition = (Canvas.GetLeft(uiElement) / 96.0) * dpiOfPrinter;
return zplXPosition;
}
我可以在其中以“实际大小”显示控件吗?使用的纸张将始终为A5(8.3英寸x 5.8英寸)。
我考虑过在画布的宽度和高度设置为830 x 580(A5的比例正确)周围使用一个视图框,但这无济于事。
有什么建议??
谢谢
参考方案
而不是您在做什么,而是对整个画布进行“截屏”并进行打印。
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace ImageProcessing
{
public class ImageProc
{
public RenderTargetBitmap GetImage(UIElement source)
{
double actualHeight = source.RenderSize.Height;
double actualWidth = source.RenderSize.Width;
if (actualHeight > 0 && actualWidth > 0)
{
RenderTargetBitmap renderTarget = new RenderTargetBitmap((int)actualWidth, (int)actualHeight, 96, 96, PixelFormats.Pbgra32);
VisualBrush sourceBrush = new VisualBrush(source);
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
drawingContext.DrawRectangle(sourceBrush, null, new Rect(0, 0, actualWidth, actualHeight));
drawingContext.Close();
renderTarget.Render(drawingVisual);
return renderTarget;
}
else
return null;
}
}
}
WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…
WPF-将窗口大小设置为子用户控件大小 - c#我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…
在datagrid(wpf)中选择行索引 - c#如何在datagrid中选择行索引? 事件SelectionChanged以下代码不起作用: private DataGridRow dgr = new DataGridRow(); private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { thi…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…