代码之家  ›  专栏  ›  技术社区  ›  RandomEngy

MVVM中Silverlight的热键命令?

  •  8
  • RandomEngy  · 技术社区  · 17 年前

    我正在尝试根据Silverlight中的击键触发命令。据我所知,您不能在Silverlight中使用AccessKey或AcceleratoryKey。此外,附加的属性InputBindings似乎也不起作用。

    我只是缺少了棱镜的一部分吗?或者有没有一种处理MVVMSilverlight热键的标准方法?

    3 回复  |  直到 17 年前
        1
  •  9
  •   JustinAngel    16 年前

    听起来您正在寻找一种处理KeyUp/KeyPress/KeyDown事件的“无代码”MVVMish方法。

    选项1:棱镜。
    你只提到过 船舶


    http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/

    <ToggleButton x:Name="ToggleButton1" 
                customCommands:Checked.Command="{Binding CheckedCommand}"
                customCommands:UnChecked.Command="{Binding UnCheckedCommand}"
            Margin="8,8,0,8" Content="Check me"
            />
    

    另外,Erik Mork有一个优秀的视频,可以很好地概述命令以及如何创建自定义命令附加DP。 http://development-guides.silverbaylabs.org/Video/Prism-Commands

    选项2:混合触发器
    表达式Blend SDK附带的触发器和行为与您尝试执行的操作密切相关。
    Blend Examples

    <i:EventTrigger EventName="Click">
          <si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/>
    </i:EventTrigger>
    

    或者,您可以为关键笔划事件创建自己的自定义触发器,并在那里执行任何您想要的操作。以下是一个示例:
    http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx

        2
  •  0
  •   Tzury Bar Yochay    16 年前

    你的意思是像Ctrl+v之类的 MSDN site .

    void Canvas_KeyUp(object sender, KeyEventArgs e)
    {
        //check for the specific 'v' key, then check modifiers
        if (e.Key==Key.V) { 
            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {
            //specific Ctrl+V action here
            }
        } // else ignore the keystroke
    }
    
        3
  •  0
  •   Thomas Levesque    16 年前

    这个 MVVM toolkit 包含一个有趣的 CommandReference 类,该类允许您将InputBinding绑定到ViewModel命令。我不确定它是否适用于Silverlight,但您可以尝试一下。。。

    好的,正如RandomEngy指出的,Silverlight中没有输入绑定。。。

    然而,我认为你可以使用附加行为。这是一种将事件“绑定”到ViewModel命令的方法。马龙·格雷奇 a good implementation here