Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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 DrawingContext上绘制符合像素边界的网格_C#_Wpf_Wpf Controls - Fatal编程技术网

C# 我需要帮助在WPF DrawingContext上绘制符合像素边界的网格

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

我试图在物理设备像素边界上绘制网格,但它不起作用。以附带的示例代码为例,第一行是左边一个像素,第二行是右边一个像素,等等。我想在每英寸没有96个像素的设备上生成一个像素完美的网格。在此方面的任何帮助都将不胜感激

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%),则不再存在完全匹配。我遇到的问题是,我的线条似乎无法均匀分布。这在我的笔记本电脑上是一个非常明显的问题