当前位置: 首页 > 编程语言 > C#

WPF中某些情况下上下文菜单被截断分享

时间:2023-04-10 16:19:49 C#

WPF中某些情况下上下文菜单被截断上下文菜单在不同的.NETFramework中被截断。查看ZIP文件中的图像(有两张屏幕截图,一张来自XP,一张来自Win7)。我创建了一个简单的VisualStudio2010解决方案来重现我的问题。(http://www.mediafire.com/download.php?doq7gsh75qgvzwq)。在XP上它似乎工作正常,但在Windows7上却不行。如果目标.NETFramework是3.5(包括SP1)(请参见zip中的图像),则可以在Windows7上重现该问题。如果我将目标框架更改为4.0,它在Windows7上也能正常工作。是否可以使上下文菜单在Windows7操作系统的.NETFramework3.5中完全可见?似乎在加载ContextMenu时,菜单的ScrollContentPresenter大小不正确,剪切了MenuItem的ItemPresenter(下面是显示问题的可视化树的简化版本)。PopupRoot,AcutalWidth:219,027,DesiredWidth:219,027Decorator,AcutalWidth:219,027,DesiredWidth:219,027NonLogicalAdornerDecorator,AcutalWidth:219,027,DesiredWidth:219,027ContextMenuProxy,AcutalWidth:219,027,DesiredWidth:219,027SystemDropShadowChrome,AcutalWidth:214,027,所需宽度:219,027边界,不宽度:214,027,所需宽度:214,027网格,宽度:212,027,所需的宽度:212,027矩形,偏宽:28,000:28,000,AcutalWidth:1,000,DesiredWidth:32,000ScrollViewer,AcutalWidth:210,027,DesiredWidth:212,027Grid,AcutalWidth:210,027,DesiredWidth:210,027Border,AcutalWidth:210,027,DesiredWidth:210,027ScrollContentPresenter,AcutalWidth:210,027,DesiredWidth:210,027ItemsPresenter,AcutalWidth:241,047,DesiredWidth:245,047加载菜单时,使用ContextMenu的可视根(PopupRoot)的PopupRoot导向更新以显示ItemsPresenter正确边框菜单的Load事件的处理程序:privatevoidmainMenu_Loaded(objectsender,RoutedEventArgse){if(sender!=null){if(menu!=null){//获取上下文菜单的视觉根varroot=(FrameworkElement)GetVisualTreeRoot(menu);//使菜单的布局无效root.InvalidateMeasure();}}}GetVisualTreeRoot方法:privateDependencyObjectGetVisualTreeRoot(DependencyObjectcontrol){DependencyObjectparent=VisualTreeHelper.GetParent();如果(父级!=null){返回GetVisualTreeRoot(父级);}else{返回控制;解决方法:设置固定宽度时似乎停止中断。仍然是Connect的理想选择。我也能够在.Net4.5.1中重现该问题。此外,使用上述标签的解决方案也不起作用。InvalidateMeasure有时会产生一个空的上下文菜单,该菜单将开始出现。当我查看上下文菜单时,我发现菜单ItemsPanel大小计算正常,但ScrollContentPresenter大小为0。任何人都面临类似的问题。我的解决方法是:privatestaticvoidContextMenuOnLoaded(objectsender,RoutedEventArgsroutedEventArgs){varmenu=(ContextMenu)sender;如果(menu.HasItems){menu.MinHeight=menu.Items.Count*25;}menu.Loaded-=ContextMenuOnLoaded;不确定这是否是最佳解决方案。但为什么会发生这种情况也令人惊讶。以上是C#学习教程:在WPF中某些情况下,上下文菜单共享的所有内容都会被截掉。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: