WPF OnRender Z 顺序控制?

标签 wpf panel z-order onrender

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

最佳答案

我会让你的“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>

关于WPF OnRender Z 顺序控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341450/

相关文章:

检索具有非缺失值的观察数

java - 通过单击 JPanel 移动未修饰的窗口

c++ - 拖动分隔栏以调整两个面板的大小时,内容(或背景)仍然存在

wpf - WindowsFormsHost ZOrder

c++ - 无模式、无父 wxDialog 仍然总是在 z 顺序的 wxFrame 窗口上方?

javascript - 更改 div 的 z-index,鼠标悬停时具有淡入淡出效果

c# - 在DataTrigger中未一致地调用Setter

wpf - 如何让 StackPanel 的子级向下填充最大空间?

c# - WPF - 计算 FlowDocument 的宽度

c# - 如何在WPF中高效的展示图形?