- 这是为什么装饰器层总是呈现为一个应用程序的最顶层(AdornerDecorator下 - 参考截图)?
- 有没有办法来改变到该装饰器可以得出层/水平?
在下面的截图,AdornerLayer加到AdornerDecorator和装饰器(MyAdorners)加入到该AdornerLayer。 但AdornerLayer检索这样的,
AdornerLayer layer1 = AdornerLayer.GetAdornerLayer(button1);
layer1.Add(new MyAdorner(button1));
要回答我的第二个问题,
有没有办法来改变到该装饰器可以得出层/水平?
我想我已经找到了解决办法。 只要将身边的水平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));
请纠正我,如果我错了。
装饰器层通过AdornerDecorator提供。 当你问给定控件WPF层将查找AdornerDecorator上可视化树。 为什么你需要改变这个逻辑是什么? 装饰器系统进行故意这样的装饰出现在装饰元素之上。
你可以自己用VisualTreeHelper搜索AdornerDecorator
文章来源: Why AdornerLayers are always the top most layers? Is there a way to change it?