Внешний слой WPF Adorner Outside Window

У меня есть окно WPF с элементом управления текстовым полем. Элемент управления имеет adorner, который становится видимым, когда текстовое поле имеет клавиатуру.

Как вы можете видеть на скриншоте ниже, adorner ограничивается границами окна. Как я могу сделать это так, чтобы отображался полный рекламодатель?

введите описание изображения здесь

Шаблон Adorner:

<DataTemplate x:Key="ContextualInfoDataTemplate">
    <Border 
        Background="#E1E1E1" 
        CornerRadius="6"
        Margin="50,36,0,0">
        <Border.Effect>
            <DropShadowEffect/>
        </Border.Effect>
        <Grid Width="200" Margin="4,3,4,4">
            <TextBlock TextWrapping="Wrap" Text="OverridenAutomationId"/>
        </Grid>
    </Border>
</DataTemplate>

Ответы

Ответ 1

Это невозможно. AdornerLayer ограничивается пределами AdornerDecorator (Window имеет один, если вы его не определили), поэтому просто невозможно выйти за пределы этого декоратора.

Вы можете получить то, что хотите, с помощью Popup (MSDN), который определяет всплывающее окно, но определенно не использует adorner, Основное различие заключается в том, что всплывающее окно не является частью визуального дерева окна, поэтому оно не будет перемещаться и не изменяться вместе с ним.

Вы также можете определить свое собственное всплывающее окно, если хотите, чтобы эффекты, которые попадали на рабочий стол (например, тень, которую вы показываете). Это было бы действительно сложно, но выполнимо. С большой работой вы можете заставить его перемещаться и изменять размер вместе с вашим окном (таким образом, эмулируя "из окна adorner" ), но это определенно не будет быстрым или легким для кода (для обычного Popup, хотя, вы можете просто подключиться к событиям Window SizeChanged и LocationChanged и соответственно перемещаться)