Pregunta

Tengo un panel personalizado que implementa un buen diseño personalizado de sus hijos. Quiero agregar algunos gráficos adicionales al panel y, por lo tanto, anular a Onrender para agregar rectángulos adicionales, etc. Funciona muy bien, excepto que el ondente solo parece agregar al fondo. ¿Hay alguna manera de hacer que su dibujo de Onrender esté en la cima de los niños?

Un panel de ejemplo ...

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));
    }
}

... usado de esta manera ...

<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>
¿Fue útil?

Solución

Haría que su "renderpanel" heredara del lienzo, y luego lo colocaría en la parte superior del wrappanel y especificaría el zindex según corresponda. Algo como esto debería funcionar:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top