上下文菜单在不同的.NET Framework中被截断。查看ZIP文件中的图像(有两个截图,一个来自XP,另一个来自Win7)。
我创建了一个简单的Visual Studio 2010解决方案来重现我的问题。
(http://www.mediafire.com/download.php?doq7gsh75qgvzwq)。
在XP上它似乎工作正常,但在Windows 7上没有。
如果目标.NET Framework为3.5(包括SP1),则可以在Windows 7上重现该问题(请参阅zip中的图像)。
如果我将目标框架更改为4.0,它在Windows 7上也可以正常工作。
是否可以在Windows 7操作系统上的.NET Framework 3.5中完全显示上下文菜单?
答案 0 :(得分:4)
似乎在加载ContextMenu
时,菜单的ScrollContentPresenter
未正确调整大小,剪切ItemPresenter
的{{1}}(下面是显示问题的视觉树的删节版本。)
MenuItem
在加载菜单时使PopupRoot, Acutal Width: 219,027, Desired Width: 219,027
Decorator, Acutal Width: 219,027, Desired Width: 219,027
NonLogicalAdornerDecorator, Acutal Width: 219,027, Desired Width: 219,027
ContextMenuProxy, Acutal Width: 219,027, Desired Width: 219,027
SystemDropShadowChrome, Acutal Width: 214,027, Desired Width: 219,027
Border, Acutal Width: 214,027, Desired Width: 214,027
Grid, Acutal Width: 212,027, Desired Width: 212,027
Rectangle, Acutal Width: 28,000, Desired Width: 32,000
Rectangle, Acutal Width: 1,000, Desired Width: 31,000
Rectangle, Acutal Width: 1,000, Desired Width: 32,000
ScrollViewer, Acutal Width: 210,027, Desired Width: 212,027
Grid, Acutal Width: 210,027, Desired Width: 210,027
Border, Acutal Width: 210,027, Desired Width: 210,027
ScrollContentPresenter, Acutal Width: 210,027, Desired Width: 210,027
ItemsPresenter, Acutal Width: 241,047, Desired Width: 245,047
的可视化根(ContextMenu
)的度量无效应该导致更新布局以显示{的正确边界{1}}。
菜单加载事件的处理程序:
PopupRoot
GetVisualTreeRoot方法:
ItemsPresenter
答案 1 :(得分:1)
解决方法:
<ContextMenu x:Name="mainMenu" Width="300" >
设置固定宽度时似乎停止了打扰。 仍然是Connect的一个很好的候选人。
答案 2 :(得分:0)
我也可以在.Net 4.5.1中重现这个问题。 也无法解决使用上述标记的解决方案。 InvalidateMeasure仍会导致 有时空的上下文菜单,它开始出现。当我窥探上下文菜单时, 发现菜单ItemsPanel大小计算完成得很好,但ScrollContentPresenter大小为0.Anyone面临类似问题。 我的解决方法是:
private static void ContextMenuOnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var menu = (ContextMenu)sender;
if (menu.HasItems)
{
menu.MinHeight = menu.Items.Count * 25;
}
menu.Loaded -= ContextMenuOnLoaded;
}
不确定这是否是最佳解决方案。但为什么会发生这种情况也令人惊讶。