为什么AdornerLayers始终是最顶层的?有没有办法改变它?

sud*_*yes 3 wpf adorner adornerdecorator adornerlayer visual-tree

  1. 为什么adorner图层始终呈现为应用程序中最顶层(在AdornerDecorator下 - 参考屏幕截图)?
  2. 有没有办法更改可以绘制装饰者的图层/级别?

在以下屏幕截图中,AdornerLayer已添加到AdornerDecorator中,Adorners(MyAdorners)将添加到此AdornerLayer中.但AdornerLayer是这样检索的,

        AdornerLayer layer1 = AdornerLayer.GetAdornerLayer(button1);
        layer1.Add(new MyAdorner(button1));
Run Code Online (Sandbox Code Playgroud)

AdornerLayer  - 大纲

sud*_*yes 5

要回答我的第二个问题,

有没有办法更改可以绘制装饰者的图层/级别?

我想我找到了解决方案.只需将AdornerDecorator元素放置在需要呈现装饰者的关卡上.任何需要装饰层的控件都会使用此AdornerDecorator元素来放置装饰器.

在这里,我使用以下代码段将装饰器移动到不同的级别.

<Window x:Class="CustomAdornerLayer.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
    <StackPanel Background="Yellow" Width="Auto">
        <Button>Button3</Button>
    </StackPanel>
    <AdornerDecorator>
        <Grid>
            <AdornerDecorator>
                <Button x:Name="button1" Margin="70,73,265,158">Button1</Button>
            </AdornerDecorator>
            <AdornerDecorator>
                <Button x:Name="button2" Margin="87,51,248,180">Button2</Button>
            </AdornerDecorator>
        </Grid>
    </AdornerDecorator>
</Grid>
Run Code Online (Sandbox Code Playgroud)

虽然仍然以同样的方式查询AdornerLayer,

        AdornerLayer layer1 = AdornerLayer.GetAdornerLayer(button1);
        layer1.Add(new MyAdorner(button1));
        AdornerLayer layer2 = AdornerLayer.GetAdornerLayer(button2);
        layer2.Add(new MyAdorner(button2));
Run Code Online (Sandbox Code Playgroud)

Adorner Layer  - 定制

如果我错了,请纠正我.