WPF Adorner Layer Outside Window

时间:2015-12-02 14:23:12

标签: wpf adorner

我有一个带文本框控件的WPF窗口。该控件具有一个装饰器,当文本框具有键盘焦点时,该装饰器可见。

正如您在下面的屏幕截图中看到的那样,装饰器仅限于窗口的边界。如何制作完整的装饰品?

enter image description here

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 个答案:

答案 0 :(得分:6)

这是不可能的。 AdornerLayer限制在AdornerDecorator的范围内(Window如果您没有定义一个,则会有一个),所以它不可能超出装饰者的界限。

您可以使用定义弹出窗口的PopupMSDN)来获得您想要的内容,但绝对不会使用装饰器。主要区别在于弹出窗口不是窗口视觉树的一部分,因此它不会随之移动或调整大小。

如果您希望效果超过桌面(例如您要显示的投影),也可以定义自己的弹出窗口。这确实很棘手,但可行。通过大量工作,您可以将其移动并随窗口一起调整大小(从而模拟一个&#34;窗外装饰器&#34;),但这绝对不会快速或轻松编码(对于正常情况而言) Popup但是,您可以抓住Window SizeChangedLocationChanged个事件,并相应地移动。