6

カスタムWPFキャンバスがあり、その上にグリッドを表示したいと思います。これを行うには、CanvasのOnRenderメソッドをオーバーライドし、DrawingContext描画関数を使用します。IsGridVisible、GridWidth、GridHeightは、それぞれ水平方向と垂直方向の各グリッド線の間のピクセル数です。

また、Canvas.LayoutTransformプロパティでScaleTransformを使用して、Canvasアイテムをズームします。予想どおり、下の画像に示すように、グリッド線の太さにScaleTransformスケーリング係数が掛けられます。現在のCanvasRenderTransformに関係なく、単一のピクセル線を描画する方法はありますか?

    protected override void OnRender(System.Windows.Media.DrawingContext dc)
    {
        base.OnRender(dc);

        if (IsGridVisible)
        {
            // Draw GridLines
            Pen pen = new Pen(new SolidColorBrush(GridColour), 1);
            pen.DashStyle = DashStyles.Dash;

            for (double x = 0; x < this.ActualWidth; x += this.GridWidth)
            {
                dc.DrawLine(pen, new Point(x, 0), new Point(x, this.ActualHeight));
            }

            for (double y = 0; y < this.ActualHeight; y += this.GridHeight)
            {
                dc.DrawLine(pen, new Point(0, y), new Point(this.ActualWidth, y));
            }
        }
    }

代替テキストhttp://www.freeimagehosting.net/uploads/f05ad1f602.png

4

1 に答える 1

1

元の投稿状態へのコメントとして。ペンの太さは 1.0/ズームに設定する必要があります。

于 2010-07-17T09:19:50.490 に答える