e.CanExecute = false使上下文菜单不可见而不是禁用

时间:2014-09-01 15:54:37

标签: c# wpf xaml

在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);
    }
}

0 个答案:

没有答案