为什么是WPF文本框.当一个特定的键捕获设置时,KeyDown事件不触发?



我正在制作一个文字处理器,我希望用户在文本框中输入字体大小,当他们按回车键时,如果没有选择文本,那么整个框的字体大小应该改变。如果选择了文本,它应该只改变该文本的大小。但是,这仅在触发key down事件而不检查按了什么键时才有效。它只适用于双字面值。没有变量。

例如:

private void FontSizeBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
(new TextRange(rtb.Selection.Start, rtb.Selection.End)).ApplyPropertyValue(TextElement.FontSizeProperty, Convert.ToDouble(18));
}

但这不是:

private void FontSizeBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Return)
{
(new TextRange(rtb.Selection.Start, rtb.Selection.End)).ApplyPropertyValue(TextElement.FontSizeProperty, Convert.ToDouble(18));
}
}

我试着让它专注于主富文本框的字体大小改变,并在父窗口,但它似乎甚至没有点燃e.Key == System.Windows.Input.Key.Return在所有,因为我尝试使用一个断点,看看它是否会击中它。它没有击中。所以,我很困惑。

如果按下回车键,那么文本框的值就是主富文本框的字体大小?顺便说一句,我使用占位符18的原因是为了防止测试时出现异常。我想看看它是否真的会改变。

提前感谢。

RichTextBox本身已经处理ENTER键:RichTextBox.AcceptsReturn默认为true,这导致在按下ENTER键时插入新行。

禁用此行为(如果您想阻止其他用户显式地添加新行。通过将AcceptsReturn设置为false:

,输入的文本仍然会自动换行)
<RichTextBox x:Name="rtb" 
AcceptsReturn="False" 
KeyDown="FontSizeBox_KeyDown" />

或者处理隧道PreviewKeyDown事件而不是冒泡KeyDown:

<RichTextBox x:Name="rtb" 
PreviewKeyDown="FontSizeBox_PreviewKeyDown" />

最新更新