【发布时间】:2011-11-12 13:50:03
【问题描述】:
我有一个自定义面板,它实现了其子项的良好自定义布局。我想在面板中添加一些额外的图形,因此覆盖 OnRender 以添加额外的矩形等。它工作得很好,除了 OnRender 似乎只添加到背景中。有没有办法让您的 OnRender 绘图位于孩子之上?
一个示例面板...
public class RenderPanel : WrapPanel
{
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawRectangle(Brushes.Red,
new Pen(Brushes.Black, 2),
new Rect(0, 0, 100, 100));
}
}
...这样使用...
<Grid>
<my:RenderPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Button Margin="10" Content="Hello"/>
<Button Margin="10" Content="Hello"/>
<Button Margin="10" Content="Hello"/>
<Button Margin="10" Content="Hello"/>
</my:RenderPanel>
</Grid>
【问题讨论】:
-
根据您想要达到的效果,装饰器可能更适合您。使用 Adorner 的主要成本是您必须覆盖
OnRender,并且您已经采用了该成本。 :)
标签: wpf panel z-order onrender