C# 我需要帮助在WPF DrawingContext上绘制符合像素边界的网格
我试图在物理设备像素边界上绘制网格,但它不起作用。以附带的示例代码为例,第一行是左边一个像素,第二行是右边一个像素,等等。我想在每英寸没有96个像素的设备上生成一个像素完美的网格。在此方面的任何帮助都将不胜感激C# 我需要帮助在WPF DrawingContext上绘制符合像素边界的网格,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我试图在物理设备像素边界上绘制网格,但它不起作用。以附带的示例代码为例,第一行是左边一个像素,第二行是右边一个像素,等等。我想在每英寸没有96个像素的设备上生成一个像素完美的网格。在此方面的任何帮助都将不胜感激 protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); var m = PresentationSource.FromVisual
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
var m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
double dpiFactor = 1 / m.M11;
var pen = new Pen(Brushes.Black, 1 * dpiFactor);
double halfPenWidth = pen.Thickness / 2.0;
for (int x = 1; x <= Consts.GridSize - 1; x++)
{
var p1 = new Point(Consts.CellSize * x, 0);
var p2 = new Point(Consts.CellSize * x, Height - 1);
var rect = new Rect(p1, p2);
var guidelines = new GuidelineSet();
guidelines.GuidelinesX.Add(rect.Left + halfPenWidth);
guidelines.GuidelinesX.Add(rect.Right + halfPenWidth);
guidelines.GuidelinesY.Add(rect.Top + halfPenWidth);
guidelines.GuidelinesY.Add(rect.Bottom + halfPenWidth);
drawingContext.PushGuidelineSet(guidelines);
drawingContext.DrawRectangle(null, pen, rect);
//drawingContext.DrawLine(pen, p1, p2);
drawingContext.Pop();
}
}
protected override void OnRender(DrawingContext DrawingContext)
{
base.OnRender(drawingContext);
var m=PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
双DPI系数=1/m.M11;
var pen=新笔(画笔。黑色,1*dpi系数);
双半笔宽=笔厚/2.0;
对于(int x=1;x WPF与分辨率无关。每英寸96像素仅用于图像的分辨率,而不是输出分辨率。@Sheridan WPF如何将其“设备独立单位”映射到屏幕像素取决于窗口的屏幕分辨率设置。默认值为96 dpi(或100%)WPF像素与屏幕像素完全匹配。如果系统设置不同(例如,120 dpi或125%),则不再存在完全匹配。我遇到的问题是,我的线条似乎无法均匀分布。这在我的笔记本电脑上是一个非常明显的问题