gpt4 book ai didi

c# - 在 WPF 中的某些情况下,上下文菜单被剪切

转载 作者:太空狗 更新时间:2023-10-30 01:08:48 24 4
gpt4 key购买 nike

上下文菜单在不同的 .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 中完全可见的解决方案?

最佳答案

似乎在加载 ContextMenu 时,菜单的 ScrollContentPresenter 大小不正确,剪切了 ItemPresenter >MenuItems(下面是显示问题的可视化树的简化版本)。

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 的可视根(PopupRoot)的度量无效应该会导致布局更新以显示正确的边界对于 ItemsPresenter

菜单加载事件的处理程序:

private void mainMenu_Loaded(object sender, RoutedEventArgs e)
{
if (sender != null)
{
ContextMenu menu = sender as ContextMenu;
if (menu != null)
{
// get the visual root for the context menu
var root = (FrameworkElement)GetVisualTreeRoot(menu);

// invalidate the menu's layout
root.InvalidateMeasure();
}
}
}

GetVisualTreeRoot 方法:

private DependencyObject GetVisualTreeRoot(DependencyObject control)
{
DependencyObject parent = VisualTreeHelper.GetParent(control);
if (parent != null)
{
return GetVisualTreeRoot(parent);
}
else
{
return control;
}
}

关于c# - 在 WPF 中的某些情况下,上下文菜单被剪切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8412747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com