如何在WPF中的屏幕键盘上显示退格,移位等符号

时间:2014-07-17 14:43:48

标签: wpf unicode on-screen-keyboard

TL; DR;

1.在WPF中如何显示关键符号(例如退格键,以及我将要发明的自定义符号),以便它们与其他键上的字母和数字无缝对齐?

2.如何对这些键上的文字应用发光效果,以便字母,数字和符号(例如退格键)以相同的方式发光?

版本更长;

我正在WPF中编写一个屏幕键盘,使用Border作为每个键的轮廓,使用TextBlock来显示文本,例如' A' key可以定义为;

<Border>
  <Border.Tag>
    <KeyValue Key="A" Function="{x:Null}" />
  </Border.Tag>
  <TextBlock Text="A" />
</Border>

功能键,例如退格键,可能是;

<Border>
  <Border.Tag>
    <KeyValue Key="{x:Null}" Function="{x:Static Functions.Backspace}" />
  </Border.Tag>
  <TextBlock Text="BACKSPACE" />
</Border>

对于Return,Backspace,Shift,Caps Lock等特殊键,我更喜欢显示符号,例如⏎而不是&#34;返回&#34; /&#34;输入&#34;。我也有自定义键,需要一个unicode字符列表中不存在的自定义字符。

我发现Unicode包含标准字符的定义(请查看以下链接,如果您不向下滚动太远并使浏览器崩溃,这非常有用);

http://unicode-table.com/en/search/?q=return

例如,这给了我U = U + 23CE或⏎作为回报。

我的问题:

  1. 我将使用可能不包含这些扩展字符的字体。本文建议大多数字体只覆盖unicode中的核心字符;
  2. http://www.typography.com/faq/question.php?faqID=41

    1. 我想使用自定义符号(我将发明),所以unicode字符无论如何都无法满足我的要求。

    2. 如果我沿着为符号创建矢量图形的路线,我不知道从哪里开始。他们将需要支持将在所有键(字母,数字和符号)上发生的发光动画,并且当按下键时将触发该动画。在.Net 3.5渲染软件之后,BitmapEffects已经过时了。下面的文章建议使用DropShadowEffect - 我应该如何创建符号,以便我可以使用相同的方法使键发光?

    3. OuterGlowBitmapEffect Alternative Without BitmapEffects

      感谢阅读和您提供的任何帮助。 朱利

      编辑以包含关键值如何存储在关键标签中的更清晰的示例。

2 个答案:

答案 0 :(得分:1)

这取决于您处理按键事件的方式。

  • 如果您绑定了一个命令,那么您可以使用命令参数来控制键值实际是什么,从而将其从显示的内容中分离出来。
  • 或者,如果在事件处理程序中执行此操作 - 使用按钮属性,例如您可以在处理程序中检查的Tag。

然后将文本框按钮内容替换为可以代表自定义键的其他内容,图像就可以了 - 路径会更好,因为它会支持应用于文本框的相同效果。

答案 1 :(得分:1)

对于视觉材料,我会考虑添加icon images

<Geometry x:Key="appbar_user_path">
    F1 M 24,12C 27.5,12 29,14 28.4952,18.1979C 28.9462,18.4566 29.25,18.9428 29.25,19.5C 29.25,20.1818 28.7951,20.7574 28.1723,20.9397C 27.9121,21.8672 27.508,22.6882 27,23.3449L 27,26.5C 28.6667,26.8333 30,27 32,28C 34,29 34.6667,29.9167 36,31.25L 36,36L 12,36L 12,31.25C 13.3333,29.9167 14,29 16,28C 18,27 19.3333,26.8333 21,26.5L 21,23.3449C 20.492,22.6882 20.0879,21.8672 19.8277,20.9397C 19.2049,20.7574 18.75,20.1818 18.75,19.5C 18.75,18.9428 19.0538,18.4566 19.5048,18.1979C 19,14 20.5,12 24,12 Z
</Geometry>

对于屏幕键盘,我认为你想深入研究TextCompositionManagerHelp with the WPF TextCompositionManager events

static void SendTextCompenstation( string key )
{
    var textcomp = new TextComposition( InputManager.Current, UiControl, key );
    TextCompositionManager.StartComposition( textcomp );
}