键绑定 WPF 与 Caliburn Micro

Key Bindings WPF with Caliburn Micro

我有一个 window 和一个 TabControl。我有一个 TabItem 我设置的地方:

Visibility="{Binding IsVisible}

我也已将此添加到 window 的 XAML:

<Window.InputBindings>
    <KeyBinding Modifiers="Ctrl"
                Key="H"
                Command="{Binding ToggleHiddenTab}" />
</Window.InputBindings> 

我将此方法添加到 ViewModel。

public void ToggleHiddenTab()
        {
            if (IsVisible == Visibility.Visible)
            {
                IsVisible = Visibility.Hidden;
                NotifyOfPropertyChange(() => IsVisible);
            }
            else
            {
                IsVisible = Visibility.Visible;
                NotifyOfPropertyChange(() => IsVisible);
            }
        }

完整 属性:

private Visibility _isVisible;
public Visibility IsVisible
        {
            get { return _isVisible; }
            set {
                _isVisible = value;
                NotifyOfPropertyChange(() => IsVisible);
            }
        }

当我按下 CTRL+h 时没有任何反应。为了测试功能,我添加了一个测试按钮:

<Button x:Name="ToggleHiddenTab" Content="Test Visible" 
        Grid.Column="0" Margin="20,8,20,8">
    <Button.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="5"/>
        </Style>
    </Button.Resources>
</Button>

当我单击该按钮时,隐藏的选项卡会更改其可见性。为什么 ctrl+h 键不被接受?

--------------------编辑------------------------ ---------------------- 根据下面的答案,我添加了:

cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]"

然后编辑器通过 "cal:" 的 "namespace undefined" 错误,快速 google 搜索建议添加到 window 标签:

xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro.Platform"

这仍然没有按照建议工作。

ToggleHiddenTab不是命令,是方法。

但是你应该可以使用附加的 cal:Message.Attach 属性 来连接键绑定:

<Window ... cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]">

所以我终于让它工作了。我忘记了 Caliburn.Micro 的 GitHub 页面中的所有示例。

就是这个: https://github.com/Caliburn-Micro/Caliburn.Micro/tree/master/samples/scenarios/Scenario.KeyBinding

我不得不更改 AppBootstrapper Configure(),并向项目添加 4 个 class。

现在一切正常!

由于某些原因,cal:Message.Attach="[Gesture Ctrl+H]... 的方法对我不起作用。但是我找到了 KeyTrigger.

的解决方案

在您的情况下,它将类似于:

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cm="http://caliburnmicro.com"
...

<Grid >
    <i:Interaction.Triggers>
        <i:KeyTrigger Key="H" Modifiers="Control">
            <cm:ActionMessage MethodName="ToggleHiddenTab" />
        </i:KeyTrigger>
    </i:Interaction.Triggers>
    ...     
</Grid>