【问题标题】:Dynamically add KeyBindings to Buttons动态地将 KeyBindings 添加到 Buttons
【发布时间】:2013-09-27 10:09:06
【问题描述】:

正如您在this question 上看到的,我需要动态按钮。现在我需要在这些按钮上添加一些KeyBindings。快捷方式作为字符串存储在我的Product 类中。 我尝试使用 ListBox/ListView 就像我用于创建按钮一样,但我无法在那里添加 KeyBindings。

示例: Button 绑定到对象“Coke”,其中“C”是快捷方式。如果我单击此按钮,我的OrderCommand 命令将被执行,我的绑定对象将用作其参数。如果我按“C”,同样应该工作。

我还需要它来处理骗子,假设我有两个产品的快捷键是“C”,如果我按“C”而不是第一个按钮被按下。按“C”将在这两个按钮之间切换,如果我按回车,Command 将被执行。

【问题讨论】:

    标签: c# wpf mvvm key-bindings


    【解决方案1】:

    您可以重新设置列表控件中按钮的样式以设置其 InputBindings

    <ListBox ItemsSource={Binding Buttons}>
        <ListBox.Resources>
             <Style x:Key="{x:Type Button}" BasedOn="{x:Type Button}">
                  <Setter Property="Button.InputBindings"/>
                       <Setter.Value>
                            <KeyBinding Key="C" Command="{Binding OrderCommand}" />     
                       </Setter.Value>
                  </Setter>
             </Style>
        </ListBox.Resources>
    </ListBox>
    

    【讨论】:

    • 谢谢!我不知道 Buttons 有一个 InputBindings 属性。但不幸的是我还有一个问题:我必须先单击按钮,然后才能通过键执行命令。我的应用程序需要通过键盘完全控制,所以我需要在第一次按键时工作的 KeyBindings。
    • 似乎您的视图模型无论如何都知道按钮,所以,我会抓住窗口上的 KeyPress 并将焦点设置在视图模型的右侧按钮上。
    【解决方案2】:

    你必须在 DataContext 中为命令定义键绑定,你可以像下面这样:

    <Window.InputBindings>
      <KeyBinding Key="C" Command="{Binding OrderCommand}" />
    </Window.InputBindings>
    

    【讨论】:

    • 没有办法将KeyBinding 绑定到按钮吗?我的按钮是对象,它们被用作参数。而且我不知道我有多少个按钮(取决于数据库数据),也许 10 个按钮,也许只有 3 个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2021-02-12
    • 1970-01-01
    • 2011-09-08
    • 2012-08-09
    • 2011-02-27
    相关资源
    最近更新 更多