据我所知,WPF应用程序中的控件不绑定系统“窗口”资源(例如,您无法使用Spy++找到它们的句柄),而旧的Windows Forms应用程序则不同。那么,这些菜单的一部分如何显示在父窗口外面呢?为什么它们没有在达到窗口边界时被裁剪?当然,一种可能性是它们并不是真正的WPF菜单,而是标准的Windows资源。但是,这与事实相冲突,即我可以像任何其他WPF控件一样精确地为其中一个菜单设置样式,并且对系统消息日志的快速查看似乎证实了它们实际上是完全相同的资源,具有相同的句柄。然后,我更进一步。我对菜单应用了旋转:
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="RenderTransformOrigin" Value="0.5,0.5" />
<Setter Property="RenderTransform">
<Setter.Value>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-18.435"/>
<TranslateTransform/>
</TransformGroup>
</Setter.Value>
</Setter>
</Style>
以下是非常有趣的结果:
那么,到底发生了什么?