我正在制作一个文字处理器,我希望用户在文本框中输入字体大小,当他们按回车键时,如果没有选择文本,那么整个框的字体大小应该改变。如果选择了文本,它应该只改变该文本的大小。但是,这仅在触发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" />