不触发InputBinding来控制菜单可见性

时间:2014-08-08 20:48:05

标签: c# wpf xaml

How can I toggle the main menu visibility using the Alt key in WPF?类似,我想通过按ALT键来控制菜单可见性。

我在XAML中有以下内容:

    <Menu Visibility="{Binding IsMenuVisable, Converter={StaticResource BooleanToVisibilityConverter}}">
        <Menu.InputBindings>
            <KeyBinding Key="LeftAlt" Command="{Binding ShowMenuCommand}"/>
            <KeyBinding Key="RightAlt" Command="{Binding ShowMenuCommand}"/>
        </Menu.InputBindings>
        <MenuItem Header="_File">
            <MenuItem Header="Open"/>
        </MenuItem>
    </Menu>

以及其视图模型中的以下内容:

    private ICommand _ShowMenu;
    public ICommand ShowMenuCommand
    {
        get
        {
            if (_ShowMenu == null)
            {
                _ShowMenu = new RelayCommand(ShowMenu, CanShowMenu);
            }
            return _ShowMenu;
        }
    }
    private void ShowMenu()
    {
        IsMenuVisable = !IsMenuVisable;
    }
    private bool CanShowMenu()
    {
        return true;
    }
    private bool _IsMenuVisable = false;
    public bool IsMenuVisable
    {
        get { return _IsMenuVisable; }
        set
        {
            if (_IsMenuVisable != value)
            {
                _IsMenuVisable = value;
                OnPropertyChanged("IsMenuVisable");
            }
        }
    }

输出中没有报告错误,因为它无法匹配绑定,但是当我按下alt键时,命令不会被执行。我还尝试将InputBindings移动到窗口定义中,认为菜单需要关注InputBindings事件才能触发,我仍然不会触发它们。

Window XAML:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<Window.DataContext>
    <VM:MainWindowViewModel />
</Window.DataContext>
<Window.InputBindings>
    <KeyBinding Key="LeftAlt" Command="{Binding ShowMenuCommand}"/>
    <KeyBinding Key="RightAlt" Command="{Binding ShowMenuCommand}"/>
</Window.InputBindings>

欢迎任何想法和建议。

2 个答案:

答案 0 :(得分:0)

尝试使用CommandBindings绑定RouteCommand ..

<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:YourView.YourCommand}" Executed="DoSomething"/>
</Window.CommandBindings>

你可以将RouteCommand绑定到Key输入

YourCommand.InputGestures.Add( /*any key combination.*/)

答案 1 :(得分:0)

您需要在绑定中指定 Modifiers 作为 Alt ,因为Alt是为修饰符保留的特殊键之一。< / p>

将输入绑定更改为:

<KeyBinding Modifiers="Alt" Key="LeftAlt" Command="{Binding ShowMenuCommand}"/>
<KeyBinding Modifiers="Alt" Key="RightAlt" Command="{Binding ShowMenuCommand}"/>