【问题标题】:DrawGeometry() in OnRender() methodOnRender() 方法中的 DrawGeometry()
【发布时间】:2012-07-04 22:12:27
【问题描述】:

我有一个覆盖 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

【问题讨论】:

  • 透明边框是什么意思?如果这真的是关于在彼此之上绘制两个矩形,那么这是最复杂和令人困惑的方法。
  • 左边的用户控件(带有圆角)比右边的小。在我看来 dc.DrawGeometry() 使用 Pen 即使传递了“null”。
  • 可能看起来很复杂。事实上,我只想在 OnRender() 方法期间将 UserControl 放入另一个。是的,还有其他(更好的)使用 UserControl 的方法(比如在 xaml 等中)。但我只修改了使用这种机制的现有 UserControl。

标签: c# wpf user-controls render visualbrush


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多