C# 在编辑器中基于字符绘制正方形

C# 在编辑器中基于字符绘制正方形,c#,drawing,visual-studio-extensions,C#,Drawing,Visual Studio Extensions,我想通过单击其中一个大括号来绘制匹配大括号的边框轮廓。就像 代码本身有点工作,但我希望边界是一个简单的正方形,我绝对不知道如何实现这一点 现在的样子: 我想要的是: 这是密码。它基于Microsofts示例vor Visual Studio扩展来标记特定字符 private void Draw(int from, int to) { var fromTo = new List<int> { from, to }.OrderBy(x => x).ToList();

我想通过单击其中一个大括号来绘制匹配大括号的边框轮廓。就像

代码本身有点工作,但我希望边界是一个简单的正方形,我绝对不知道如何实现这一点

现在的样子:

我想要的是:

这是密码。它基于Microsofts示例vor Visual Studio扩展来标记特定字符

private void Draw(int from, int to)
{
    var fromTo = new List<int> { from, to }.OrderBy(x => x).ToList();
    from = fromTo.First();
    to = fromTo.Last();

    var textViewLines = this.view.TextViewLines;

    var span = new SnapshotSpan(this.view.TextSnapshot, Span.FromBounds(from, to + 1));
    var geometry = (textViewLines as IWpfTextViewLineCollection).GetMarkerGeometry(span);
    if (geometry != null)
    {
        this.Draw(span, geometry);
    }
}

private void Draw(SnapshotSpan span, Geometry geometry)
{
    var drawing = new GeometryDrawing(new SolidColorBrush(), this.pen, geometry);
    drawing.Freeze();

    var drawingImage = new DrawingImage(drawing);
    drawingImage.Freeze();

    var image = new Image {
        Source = drawingImage
    };

    Canvas.SetLeft(image, geometry.Bounds.Left);
    Canvas.SetTop(image, geometry.Bounds.Top);

    this.layer.AddAdornment(AdornmentPositioningBehavior.TextRelative, span, null, image, null);
}
private void Draw(int-from,int-to)
{
var fromTo=新列表{from,to}.OrderBy(x=>x.ToList();
from=fromTo.First();
to=fromTo.Last();
var textViewLines=this.view.textViewLines;
var span=新快照span(this.view.TextSnapshot,span.FromBounds(from,to+1));
var geometry=(文本视图线作为IWPTextViewLineCollection)。GetMarkerGeometry(span);
如果(几何体!=null)
{
绘制(跨度、几何);
}
}
专用空心图形(快照跨度、几何图形)
{
var drawing=新几何图形绘制(新SolidColorBrush(),this.pen,geometry);
绘图。冻结();
var drawingImage=新的drawingImage(图纸);
drawingImage.Freeze();
var图像=新图像{
源=绘图图像
};
SetLeft(image,geometry.Bounds.Left);
Canvas.SetTop(image,geometry.Bounds.Top);
this.layer.addAdorment(AdormentPositionBehavior.TextRelative,span,null,image,null);
}

在我看来,方形框是使用您案例中每一行的边界绘制的,而您需要框的宽度以范围内最长的线为基础。