【问题标题】:Key Bindings WPF with Caliburn Micro键绑定 WPF 与 Caliburn Micro
【发布时间】:2018-07-29 13:33:41
【问题描述】:

我有一个带有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"

这仍然没有按建议工作。

【问题讨论】:

    标签: wpf visibility key-bindings


    【解决方案1】:

    ToggleHiddenTab 不是命令,而是方法。

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

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

    【讨论】:

    • 这是一个“cal:”命名空间未定义错误,我用谷歌搜索了该错误并被指示添加命名空间定义。我将代码添加到我原来的问题中 - 在 EDIT 行下。这仍然不起作用。
    • 更新,在添加上述“cal:Message.Attach....”和“cal=.......”命名空间后。在我发现我的程序目录中有 2 个版本(4.0 和 4.5)之后,我的程序在为“Microsoft.Expression.Interaction”初始化时崩溃了。我从办公室计算机上的 GitHub 中提取了该项目,它也崩溃了。我必须从 Nuget 安装“Blend”才能让应用程序使用 4.5。现在程序运行了,但键绑定没有。
    • 我将 mm8 的答案标记为正确,这是处理该问题的最佳方法,但是我遗漏了许多其他编码。有关 Caliburn.Micro 制造商的演示,请参阅下一个答案中发布的链接
    【解决方案2】:

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

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

    我不得不对 AppBootstrapper Configure() 进行更改,并向项目中添加另外 4 个类。

    现在一切正常!

    【讨论】:

      【解决方案3】:

      由于某种原因,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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多