WPF 装饰层外 Window
WPF Adorner Layer Outside Window
我有一个带有文本框控件的 WPF window。该控件有一个装饰器,当文本框具有键盘焦点时该装饰器可见。
正如您在下面的屏幕截图中所见,装饰器仅限于 window 的边界。我怎样才能显示完整的装饰品?
装饰器模板是:
<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>
这不可能。 AdornerLayer
限制在 AdornerDecorator
的范围内(如果您没有定义,Window
有一个),所以不可能超出该装饰器的范围。
您可以使用定义弹出窗口 window 的 Popup
(MSDN) 获得所需内容,但绝对不能使用装饰器。主要区别在于弹出窗口不是 window 可视化树的一部分,因此它不会随之移动或调整大小。
如果您想要遍及桌面的效果(如您显示的投影),您也可以定义自己的弹出窗口 window。那确实很棘手,但可行。通过大量的工作,您也可以使它与您的 window 一起移动和调整大小(从而模拟 "out of window adorner"),但这绝对不会快速或容易编码(对于正常的 Popup
不过,您可以挂钩 Window
的 SizeChanged
和 LocationChanged
事件并相应地移动)
我有一个带有文本框控件的 WPF window。该控件有一个装饰器,当文本框具有键盘焦点时该装饰器可见。
正如您在下面的屏幕截图中所见,装饰器仅限于 window 的边界。我怎样才能显示完整的装饰品?
装饰器模板是:
<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>
这不可能。 AdornerLayer
限制在 AdornerDecorator
的范围内(如果您没有定义,Window
有一个),所以不可能超出该装饰器的范围。
您可以使用定义弹出窗口 window 的 Popup
(MSDN) 获得所需内容,但绝对不能使用装饰器。主要区别在于弹出窗口不是 window 可视化树的一部分,因此它不会随之移动或调整大小。
如果您想要遍及桌面的效果(如您显示的投影),您也可以定义自己的弹出窗口 window。那确实很棘手,但可行。通过大量的工作,您也可以使它与您的 window 一起移动和调整大小(从而模拟 "out of window adorner"),但这绝对不会快速或容易编码(对于正常的 Popup
不过,您可以挂钩 Window
的 SizeChanged
和 LocationChanged
事件并相应地移动)