【发布时间】: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