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

WPF RichTextBox无选中时设置光标处后续输入文字字号问题

WPF RichTextBox 实现光标位置后续输入字号设置

要实现光标定位时修改后续输入文本的字号,核心是利用TextSelection.ApplyPropertyValue方法——它在空选择(仅光标)时会设置后续输入的格式,而非仅修改选中的文本范围。

修改后的完整代码

XAML代码无需改动,仅调整C#的事件处理逻辑:

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace WpfApp2
{
    public partial class MainWindow : Window
    {
        public ObservableCollection<double> Werte { get; set; }

        public MainWindow()
        {
            Werte = new ObservableCollection<double>();
            Werte.Add(4);
            Werte.Add(10);
            Werte.Add(20);
            Werte.Add(55);
            InitializeComponent();

            cmbbx.ItemsSource = Werte;
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cmbbx.SelectedValue == null) return;
            
            var newSize = (double)cmbbx.SelectedValue;
            // 确保RichTextBox获得焦点,保证格式设置生效
            MyRichTextBox.Focus();
            // 空选择时设置后续输入格式,选中时修改选中文本字号
            MyRichTextBox.Selection.ApplyPropertyValue(TextElement.FontSizeProperty, newSize);
        }
    }
}

原理说明

原代码使用TextRange.ApplyPropertyValue,当没有选中文本时,这个空范围的属性设置不会影响后续输入。而TextSelection.ApplyPropertyValue方法针对空选择(仅光标)的场景,会将格式属性应用到当前光标位置的输入上下文:

  • 有文本选中时:直接修改选中文本的字号
  • 仅光标定位时:后续输入的文本自动继承该格式属性,同时不会改动已有文本的格式

测试验证:

  1. 在RichTextBox中输入“stackoverflow”,将光标定位到“stackover”与“flow”之间
  2. 选择字号20
  3. 输入“cool”,新输入的“cool”会以20号字显示,原有“stackoverflow”保持原字号不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:49:52