WPF OnRender Z-Order? - PullRequest
       20

WPF OnRender Z-Order?

2 голосов
/ 08 сентября 2011

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

1 голос
/ 08 сентября 2011

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