You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#中如何修改TextBox选中文本的FontWeight?

解决WPF TextBox仅修改选中文字FontWeight的问题

嘿,我懂你现在的困扰——本来想只给TextBox里选中的文字加粗,结果写的代码把整个文本框的字体都改了,对吧?咱们来一步步解决这个问题:

问题根源

你之前尝试用TextBoxVoorbeeld.SelectedText.FontWeight来修改选中文字的粗细,但这个思路走不通:

  • SelectedText本质上只是个只读的字符串,它没有FontWeight属性,没法直接通过它修改格式;
  • 你当前的代码修改的是TextBox.FontWeight,这会作用于整个文本框的所有内容,自然达不到只改选中部分的效果。

正确的解决方法

WPF的TextBox其实提供了Selection对象,专门用来操作选中区域的格式。我们可以通过TextBox.Selection.FontWeight来单独设置选中文字的字体粗细,同时处理“无选中内容时修改默认输入格式”的场景,更符合编辑器的常规逻辑。

修改后的代码

private void Bold_On_Off()
{
    // 先判断是否有选中的文本
    if (TextBoxVoorbeeld.SelectionLength > 0)
    {
        // 切换选中文本的字体粗细
        TextBoxVoorbeeld.Selection.FontWeight = 
            TextBoxVoorbeeld.Selection.FontWeight == FontWeights.Bold 
                ? FontWeights.Normal 
                : FontWeights.Bold;
    }
    else
    {
        // 如果没有选中文本,修改默认的字体粗细(后续输入会应用该格式)
        TextBoxVoorbeeld.FontWeight = 
            TextBoxVoorbeeld.FontWeight == FontWeights.Bold 
                ? FontWeights.Normal 
                : FontWeights.Bold;
    }

    // 更新按钮状态和状态栏提示
    bool isBoldActive = TextBoxVoorbeeld.FontWeight == FontWeights.Bold || 
                       (TextBoxVoorbeeld.SelectionLength > 0 && TextBoxVoorbeeld.Selection.FontWeight == FontWeights.Bold);
    Bold.IsChecked = isBoldActive;
    BoldButton.IsChecked = isBoldActive;
    StatusBold.Content = isBoldActive ? "Bold" : "";
}

代码说明

  • 选中内容处理:通过SelectionLength > 0判断是否有选中的文本,有的话直接切换Selection.FontWeight,只会影响选中的部分;
  • 无选中时的处理:如果没有选中内容,修改TextBox.FontWeight,这样后续输入的文字会自动应用对应的粗细;
  • 按钮状态更新:同时考虑“整体格式为加粗”和“选中部分为加粗”两种情况,确保按钮的选中状态和当前格式匹配。

额外建议

如果你的需求是支持更多富文本格式(比如斜体、字体颜色、下划线等),WPF的RichTextBox会是更合适的选择,它对富文本的编辑和格式控制支持更完善。但如果只是简单的加粗需求,用上面的TextBox.Selection方案完全足够。

内容的提问来源于stack exchange,提问作者PIETER BRACKE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:34