C# WPF将装饰件与导轨组对齐

C# WPF将装饰件与导轨组对齐,c#,wpf,adorner,C#,Wpf,Adorner,我想创建一个简单的装饰器,用边界框标记选定的元素。我希望它是尖锐的,正好是一个像素以外的目标内容。我发现了一些有用的代码,但它并没有完全按照我所希望的那样工作 我的SelectAdorner的OnRender方法是: Rect adornedElementRect = new Rect(AdornedElement.DesiredSize); SolidColorBrush renderBrush = new SolidColorBrush(Colors.Transparent); Pen r

我想创建一个简单的装饰器,用边界框标记选定的元素。我希望它是尖锐的,正好是一个像素以外的目标内容。我发现了一些有用的代码,但它并没有完全按照我所希望的那样工作

我的SelectAdorner的OnRender方法是:

Rect adornedElementRect = new Rect(AdornedElement.DesiredSize);

SolidColorBrush renderBrush = new SolidColorBrush(Colors.Transparent);
Pen renderPen = new Pen(new SolidColorBrush(Colors.LightBlue), 1);
double halfPenWidth = renderPen.Thickness / 2;

// Create a guidelines set
GuidelineSet guidelines = new GuidelineSet();
guidelines.GuidelinesX.Add(adornedElementRect.Left + halfPenWidth);
guidelines.GuidelinesX.Add(adornedElementRect.Right + halfPenWidth);
guidelines.GuidelinesY.Add(adornedElementRect.Top + halfPenWidth);
guidelines.GuidelinesY.Add(adornedElementRect.Bottom + halfPenWidth);
drawingContext.PushGuidelineSet(guidelines);

drawingContext.DrawRectangle(renderBrush, renderPen, adornedElementRect);
问题是边界框没有围绕内容正确对齐,请参见第二项和第三项。我希望结果是下图底部项目中的结果

有什么想法可以让我实现我想要的吗

另外,如果我需要的话,让装饰器以与renderPen.Thickness大于1相同的方式工作也会很好


感谢您的帮助。

在创建指南集之前,需要添加以下代码:

adornedElementRect = new Rect(
    adornedElementRect.Left - halfPenWidth,
    adornedElementRect.Top - halfPenWidth,
    adornedElementRect.Width + renderPen.Thickness,
    adornedElementRect.Height + renderPen.Thickness
  );
当考虑到画笔的厚度时,AdornedElement与AdornedElement重叠这一事实就产生了问题。AdornedElement.DesiredSize的值对应于边框的外边缘。这意味着装饰条一半画在边界上,一半画在边界外。然后,导向线集将垂直边的右侧和水平边的底部与像素边界对齐。这会使图形看起来很锐利,但是边缘会移动到装饰元素的内部或外部。这就是创建工件的原因


将指定的更改添加到AdorneDeleteCenter时,它将在AdorneDelete的外部和右侧绘制。现在,导向线集将装饰条与边界控件类似地对齐。有关WPF如何在屏幕上绘制内容的更多信息,请参见此部分。

为什么不简单地使用边框元素?请提供实际发行的回购: