【问题标题】:Binding the Key Property of a Keybinding绑定键绑定的键属性
【发布时间】:2011-11-01 20:42:39
【问题描述】:

This question 提供了一种干净的方法,用于将窗口级别的键绑定到 XAML 中的 ViewModel 命令。这非常棒,但它不允许自定义正在使用的密钥。是否可以将“key”值绑定到 viewmodel,如果可以,csharp 中的“key”是什么类型的值?

<Window.InputBindings>
<KeyBinding Key="{Binding RefreshKey}"
            Command="{Binding RefreshCommand}" />

或者是否可以在代码中添加窗口级键绑定?同样的问题有一个解决方案可以将其放入代码隐藏中,但如果可能的话,我更愿意将代码保留在 ViewModel 中。

【问题讨论】:

    标签: c# wpf key-bindings


    【解决方案1】:

    http://msdn.microsoft.com/en-us/library/system.windows.input.keygesture.aspx

    对于 KeyGesture XAML 用法,通常在 XAML 中设置的属性 是手势,在手势既代表标准键的情况下 和一个修饰键

    ... 请注意,XAML 用法不直接声明 元素。该对象元素的使用是不可能的,因为 KeyGesture 不公开公共默认构造函数。相反,XAML 使用 使用 typeconverter 行为来声明整个 KeyGesture 内联 作为 Gesture 属性值。

    我认为你可以返回一个 KeyGesture 对象来绑定一个 Key 属性,或者你总是可以返回一个组合字符串,它会自动转换

    【讨论】:

    • KeyGesture,完美!谢谢
    【解决方案2】:

    属性类型是枚举Key,所以它应该足够简单,可以从视图模型中公开它并绑定到它。但是,正如您链接到的问题中所述,直到 WPF 4 才添加对 KeyBinding 中的绑定的支持。

    编辑:没有意识到您正在寻求一种通过多次击键来调用命令的方法。请参阅我的博客文章 here 讨论我是如何解决这个问题的。您可能需要针对 WPF 4 进行调整。

    【讨论】:

    • 我不明白您将如何使用该类型返回多个 Key。像 CTRL+R 这样的东西在单个值中是不可能的。
    • 抱歉,误解了您的问题。编辑了我的帖子。
    • 我想你还是误会了。我不是要求多次击键,而是修改键。就 windows 而言,Ctrl+R 是一键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多