代码之家  ›  专栏  ›  技术社区  ›  Dwayne B

使用Caliburn Micro键绑定WPF

  •  1
  • Dwayne B  · 技术社区  · 6 年前

    我有一扇窗户 TabControl . 我有一个 TabItem 我设置的位置:

    Visibility="{Binding IsVisible}
    

    我还将此添加到窗口的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”错误,谷歌快速搜索建议添加到窗口标记:

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

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

    3 回复  |  直到 6 年前
        1
  •  2
  •   mm8    6 年前

    ToggleHiddenTab 不是命令,而是方法。

    但你应该能够使用 cal:Message.Attach 连接密钥绑定的附加属性:

    <Window ... cal:Message.Attach="[Gesture Ctrl+H] = [ToggleHiddenTab]">
    
        2
  •  1
  •   Dwayne B    6 年前

    所以我终于成功了。我忘了Caliburn中的所有例子。Micro的GitHub页面。

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

    我必须更改AppBootstrapper Configure(),并向项目中添加4个以上的类。

    现在一切都很好!

        3
  •  1
  •   R.Titov    2 年前

    采用的方法 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>