3

我有一个自定义面板,它实现了它的孩子的一个很好的自定义布局。我想在面板中添加一些额外的图形,因此覆盖 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>
4

1 回答 1

1

我会让你的“RenderPanel”从画布继承,然后把它放在 WrapPanel 的顶部,并根据需要指定 ZIndex。像这样的东西应该工作:

<Grid>
    <WrapPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Canvas.ZIndex="0">
        <Button Margin="10" Content="Hello"/>
        <Button Margin="10" Content="Hello"/>
        <Button Margin="10" Content="Hello"/>
        <Button Margin="10" Content="Hello"/>
    </WrapPanel>
    <my:RenderPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Canvas.ZIndex="1" />
</Grid>
于 2011-09-07T23:08:48.980 回答