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>