在Windows 7中,e.CanExecute = false正在禁用上下文菜单项。但是在Windows Server2008R2中,它不起作用,即菜单项变得不可见(消失)。为什么这在Windows Server 2008R2中不起作用?有替代品吗?
----- ----------已编辑
以下是在Windows 7中正常工作的代码,但在Windows Server 2008 r2中没有 以下是代码段:
XAML代码:
<ContextMenu x:Key="SharedContextMenu">
<ContextMenu.CommandBindings>
<CommandBinding Command="ApplicationCommands.Cut" CanExecute="EnableContextMenu" Executed="ContextMenuCommandHandled" />
<CommandBinding Command="ApplicationCommands.Copy" CanExecute="EnableContextMenu" Executed="ContextMenuCommandHandled" />
<CommandBinding Command="ApplicationCommands.Paste" CanExecute="EnableContextMenu" Executed="ContextMenuCommandHandled" />
</ContextMenu.CommandBindings>
<MenuItem Command ="Cut" InputGestureText=" "/>
<MenuItem Command ="Copy" InputGestureText=" "/>
<MenuItem Command= "Paste" InputGestureText=" "/>
</ContextMenu>
代码背后:
private void EnableContextMenu(object sender, CanExecuteRoutedEventArgs e)
{
try
{
ContextMenu controlContextMenu = sender as ContextMenu;
if (controlContextMenu != null && controlContextMenu.PlacementTarget != null)
{
e.CanExecute = true;
if (controlContextMenu.PlacementTarget is ComboBox)
{
if (string.IsNullOrEmpty(((ComboBox)controlContextMenu.PlacementTarget).Text))
{
e.CanExecute = false;
}
}
}
}
catch (Exception exceptionInstance)
{
LogManager.LogException("EnableContextMenu(): " + exceptionInstance.Message);
MessageBox.Show(exceptionInstance.Message, Constants.SCREEN_TITLE, MessageBoxButton.OK, MessageBoxImage.Error);
}
}