0

我有一个覆盖 OnRender-Method 的 UserControl,如下所示:

我的用户控件.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,我会得到以下输出:

使用 MyUserControl 创建的输出示例

我现在的问题是,如果有一种方法可以在 OnRender() 方法中使用 UserControl1,而不需要在 UserControl1-Rectangle 周围设置透明边框。

提前致谢, rhe1980

4

1 回答 1

0

您看到不同大小的矩形的原因很简单。当您使用 Pen 绘制矩形时,Pen 线位于矩形边缘的中心,或者换句话说,边缘位于线条的中间。因此,笔宽的一半在每个方向上位于矩形之外。因此,您必须在矩形的宽度和高度上添加一个 Pen 宽度才能获得绘图输出的总大小,在您的示例中为 51 x 31。

您也许可以通过Geometry.GetRenderBounds方法检查这一点。

于 2012-07-04T14:33:34.690 回答