我有一个重写OnRender- UserControl的方法,如下所示:
MyUsercontrol.cs:
MyUserControl: UserControl
{
protected override void OnRender(DrawingContext dc)
{
dc.DrawRectangle(Brushes.White, new Pen(Brushes.Black,1), new Rect(0,10,50,30));
var visualBrush = new VisualBrush(new UserControl1{Height=30, Width=50});
dc.DrawGeometry(visualBrush, null, new RectangleGeometry(new Rect(50,10,50,30)));
}
}上面使用的UserControl如下所示(在xaml中定义,没有额外的代码隐藏代码):
<UserControl x:Class="VisualBrushExample.UserControl1" ...>
<Grid>
<Border BorderThickness="1" BorderBrush="Black" Background="White" CornerRadius=8,0,0,8"/>
</Grid>
</UserControl>现在,如果我使用MyUserControl,我会得到以下输出:

我现在的问题是,如果存在一种方法,我可以在OnRender()方法中使用UserControl1,而不需要获得UserControl1-Rectangle周围的透明边框。
提前谢谢你,rhe1980
发布于 2012-07-04 22:33:35
你看到不同大小的矩形的原因很简单。当您用钢笔绘制矩形时,钢笔线在矩形的边缘居中,或者换句话说,边缘位于线条的中间。因此,笔宽的一半在每个方向上都位于矩形之外。因此,您必须在矩形的宽度和高度上添加一个画笔宽度,以获得绘图输出的总大小,在您的示例中为51x31。
您也许可以通过Geometry.GetRenderBounds方法来检查这一点。
https://stackoverflow.com/questions/11328537
复制相似问题