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
相关产品推荐
相关产品推荐

