为什么AdornerLayers总是最上面的几层? 有没有办法改变它?(Why AdornerL

2019-08-02 06:20发布

  1. 这是为什么装饰器层总是呈现为一个应用程序的最顶层(AdornerDecorator下 - 参考截图)?
  2. 有没有办法来改变到该装饰器可以得出层/水平?

在下面的截图,AdornerLayer加到AdornerDecorator和装饰器(MyAdorners)加入到该AdornerLayer。 但AdornerLayer检索这样的,

        AdornerLayer layer1 = AdornerLayer.GetAdornerLayer(button1);
        layer1.Add(new MyAdorner(button1));

Answer 1:

要回答我的第二个问题,

有没有办法来改变到该装饰器可以得出层/水平?

我想我已经找到了解决办法。 只要将身边的水平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>

虽然AdornerLayer仍质疑以同样的方式,

        AdornerLayer layer1 = AdornerLayer.GetAdornerLayer(button1);
        layer1.Add(new MyAdorner(button1));
        AdornerLayer layer2 = AdornerLayer.GetAdornerLayer(button2);
        layer2.Add(new MyAdorner(button2));

请纠正我,如果我错了。



Answer 2:

装饰器层通过AdornerDecorator提供。 当你问给定控件WPF层将查找AdornerDecorator上可视化树。 为什么你需要改变这个逻辑是什么? 装饰器系统进行故意这样的装饰出现在装饰元素之上。

你可以自己用VisualTreeHelper搜索AdornerDecorator



文章来源: Why AdornerLayers are always the top most layers? Is there a way to change it?