それはContextMenu
がロードされたときに、メニューのためScrollContentPresenter
がMenuItem
秒のItemPresenter
クリッピング、正しいサイズされていないようです(以下から問題を示すビジュアルツリーの簡略版です)。
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
の正しい境界を表示するように更新させなければなりません。
メニューのLoadイベントのハンドラ:
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;
}
}
誰もいませんか?してください、私は助けが必要です:) –
好奇心の行動...あなたが言うようにそれは本当に起こります。私にとって不思議なことに、Visual Studio内で実行している場合は、これが最も起こります。まだVSが動作していないときに起こることがあります。私にとってこれはConnectの候補です。 – NestorArturo
再現できません。 NET 4.5がインストールされている可能性がありますか? – Phil