[英]Why is WPF TextBox.KeyDown event not firing when a specific key to catch is set?
我正在制作一个文字处理器,我希望用户在文本框中输入字体大小,当他们按下回车键时,如果没有选择文本,那么整个框的字体大小应该会改变。 如果选择了文本,它应该只更改该文本的大小。 但是,这仅在触发按键事件而不检查按下了什么键时才有效。 它只适用于双重文字。 没有变数。
例如,这种作品:
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" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.