WPF OnRender Z-Order?

У меня есть пользовательская панель, которая реализует приятную пользовательскую компоновку своих детей. Я хочу добавить дополнительную графику на панель и переопределить 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>

1 ответ

Решение

Я бы заставил вашу RenderPanel наследовать от canvas, а затем положил ее поверх 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>
Другие вопросы по тегам