繁体   English   中英

为什么设置要捕获的特定键时 WPF TextBox.KeyDown 事件不会触发?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM