4
  1. アドナーレイヤーが常にアプリケーションの最上位レイヤーとしてレンダリングされるのはなぜですか(AdornerDecoratorの下-スクリーンショットを参照)?
  2. 装飾者を描くことができるレイヤー/レベルを変更する方法はありますか?

次のスクリーンショットでは、AdornerLayerがAdornerDecoratorに追加され、Adorners(MyAdorners)がこのAdornerLayerに追加されています。しかし、AdornerLayerは次のように取得されます。

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

AdornerLayer-概要

4

2 に答える 2

6

私の2番目の質問に答えるために、

装飾者を描くことができるレイヤー/レベルを変更する方法はありますか?

私は解決策を見つけたと思います。装飾者をレンダリングする必要があるレベルの周りに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));

アドナーレイヤー-カスタマイズ

私が間違っている場合は、親切に訂正してください。

于 2012-11-03T16:36:11.037 に答える
3

AdornerレイヤーはAdornerDecoratorによって提供されます。指定されたコントロールのレイヤーを要求すると、wpfはAdornerDecoratorの上部ビジュアルツリーを探します。なぜこのロジックを変更する必要があるのですか?装飾が装飾された要素の上に表示されるように、装飾システムは意図的にこのように作成されました。

VisualTreeHelperを使用してAdornerDecoratorを自分で検索できます

于 2012-11-03T13:44:57.250 に答える