WPF的关键技巧

4

Office 2007和Ribbon引入了“Key Tips”的概念。

简而言之,Ribbon中的每个命令都会接收一个字母,您可以按下该字母来激活该命令。...这些字母由小型“KeyTips”指示,指示要按下哪个字母以激活控件。 KeyTips使用Alt键显示,因此使用它们的感觉类似于Windows中的菜单导航。

(来源:http://blogs.msdn.com/jensenh/archive/2006/04/12/574930.aspx)

以下是Key Tips的示例。在此图中,用户按下了ALT键,并等待进一步输入。

Word 2007中的关键提示示例 http://blogs.msdn.com/blogfiles/outlook/WindowsLiveWriter/RibbonKeyTips_8F7C/clip_image002_thumb.jpg

是否有任何WPF开源的“关键提示”示例?

如何以通用的方式实现此功能(即不需要Ribbon)?如何使用MVVM模式实现此功能(考虑到ICommand不支持InputBindings)。

注意:ActiPro已在其Ribbon实现中实现了此功能,但他们没有发布源代码。

2个回答

2

首先,您可以查看微软的 WPF 工具包中的 Ribbon Preview

或者,一般的方法如下:

  1. 在您的窗口/顶层控件中创建一个 DependencyProperty,例如 IsShowingKeyTips。根据需要捕获键盘输入以触发此属性。

  2. 创建一个 ContentControl,其中有两个依赖属性,1) IsShowingKeyTip 和 2) KeyTipText。我们将其称为 KeyTipContentControl

  3. 编辑 ContentControlControlTemplate 以实现所需外观。可将其设置为 Canvas 或其他布局容器,使用一些绑定以适当地调整大小,也可以添加一些负的 Margin 值。

  4. 如果您想进行高级设置,可以创建一些 AttachedProperties,例如 KeyTip.Text,以将这些属性从普通控件冒泡到 KeyTipContentControl 中。

  5. 在 XAML 中,将 ContentControls 放在您想要使用 KeyTips 的 Controls 周围。根据需要设置绑定。

最终,您将在顶层得到类似这样的内容:

<Window ... >
  <code:KeyTipContentControl 
     KeyTipText="A" 
     IsShowingKeyTip="{Binding IsShowingKeyTips}">
     <Button x:Name="MyButtonWithKeyTip" ... />
  </code:KeyTipContentControl>
</Window>

目前我还没有能够优雅地处理按键的能力。 :-)


你好 @exclsr。我有一个问题,关键提示必须以分层方式工作,这意味着它可以具有多个级别的关键提示。你能帮我找到解决这个问题的方法吗? - Luke Le
嗨@MR.LB,感谢您的提问。我建议您在Stack Overflow上开一个新的问题。祝您搜索好运。 - exclsr

2

谢谢提供链接!请注意,问题并不是关于使用哪个功能区,而是如何创建KeyTips(特别是与任何功能区实现分开)。话虽如此,这是一个KeyTips的开源实现,因此,这是一个有用的答案。 - Brad Leach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接