C#
WPF

AdornerLayer.GetAdornerLayerの戻り値がnullになる

More than 1 year has passed since last update.

問題

ListBoxの中身をゴースト(これが正しいかは知らない)付きでドラッグ・ドロップで移動させようとしたときに
ぶつかった問題。
AdornerLayer.GetAdornerLayerの戻り値がnullになる。

解決方法

サンプルで作ったときは動いてたのに、本番環境に持って行った瞬間動かなくなった。
何が違うのかサンプルと比較すると本番環境ではBaseWindowが存在する。

試しにコンストラクタの

DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseWindow), new FrameworkPropertyMetadata(typeof(BaseWindow)));

をコメントアウトするとAdornerLayer.GetAdornerLayerの戻り値がnullではなくなった!
ってことは、BaseWindowGeneric.xamlの中身がおかしい。

結局、下記のようにして解決

<Style TargetType="{x:Type z:BaseWindow}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type z:BaseWindow}">
                <Grid Background="{TemplateBinding Background}">
                    <AdornerDecorator> ★これ追加
                        <ContentPresenter/>
                    </AdornerDecorator> ★これ追加
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>