通过 Unicode 编码检查 TextCompositionEventArgs.ControlText
Checking TextCompositionEventArgs.ControlText by Unicode encoding
我正在看一本书中的一个 WPF 示例,其中 OnPreviewTextInput
在派生自 Window
的 class 中被覆盖。覆盖根据 Unicode 文字字符 '\u000F'
检查 TextCompositionEventArgs.ControlText
字符串。这对应于用户按下 Ctrl+O。
字符 '\u000F'
对我来说看起来像 "magic" 字面意思。如果我想检查其他代码,我怎么知道要检查什么?有没有更 reader 友好的方法来做到这一点?
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
// Ctrl+O
if (e.ControlText.Length > 0 && e.ControlText[0] == '\u000F')
{
// do stuff
}
}
如您所料,它是一个 "magic" 文字。但魔术背后有一些逻辑和历史。它对应于一个叫做 Control characters 的旧概念(长读,只有在你感兴趣的时候)。
快速参考0x0F
如何对应Ctrl-O
、see this table. Focus on the first column with the caret notation;您会看到字符 1-26 (0x01
-0x1A
) 将 Ctrl-A
映射到 Ctrl-Z
。字符 15(或 0x0F
)是您的 Ctrl-O
。
这些旧的 ASCII 控制代码被引入了 Unicode,并保留了它们的映射。因此你的 '\u0000F'
.
如果您在 Internet 上的时间足够长,您会看到一些愚蠢的 ^H^H^H^Hawesome 笑话,这些笑话依赖于 ^H
映射到 Backspace 控制字符的神秘知识。您实际上可以尝试其中的一些。启动记事本,您会看到 Ctrl-I
和 Ctrl-M
映射到相应的 Tab 和 Enter。
使用Keyboard.IsKeyDown
方法应该使代码更具可读性:
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
// Ctrl+O
if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
&& Keyboard.IsKeyDown(Key.O))
{
//...
}
}
我正在看一本书中的一个 WPF 示例,其中 OnPreviewTextInput
在派生自 Window
的 class 中被覆盖。覆盖根据 Unicode 文字字符 '\u000F'
检查 TextCompositionEventArgs.ControlText
字符串。这对应于用户按下 Ctrl+O。
字符 '\u000F'
对我来说看起来像 "magic" 字面意思。如果我想检查其他代码,我怎么知道要检查什么?有没有更 reader 友好的方法来做到这一点?
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
// Ctrl+O
if (e.ControlText.Length > 0 && e.ControlText[0] == '\u000F')
{
// do stuff
}
}
如您所料,它是一个 "magic" 文字。但魔术背后有一些逻辑和历史。它对应于一个叫做 Control characters 的旧概念(长读,只有在你感兴趣的时候)。
快速参考0x0F
如何对应Ctrl-O
、see this table. Focus on the first column with the caret notation;您会看到字符 1-26 (0x01
-0x1A
) 将 Ctrl-A
映射到 Ctrl-Z
。字符 15(或 0x0F
)是您的 Ctrl-O
。
这些旧的 ASCII 控制代码被引入了 Unicode,并保留了它们的映射。因此你的 '\u0000F'
.
如果您在 Internet 上的时间足够长,您会看到一些愚蠢的 ^H^H^H^Hawesome 笑话,这些笑话依赖于 ^H
映射到 Backspace 控制字符的神秘知识。您实际上可以尝试其中的一些。启动记事本,您会看到 Ctrl-I
和 Ctrl-M
映射到相应的 Tab 和 Enter。
使用Keyboard.IsKeyDown
方法应该使代码更具可读性:
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
// Ctrl+O
if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
&& Keyboard.IsKeyDown(Key.O))
{
//...
}
}