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方法针对空选择(仅光标)的场景,会将格式属性应用到当前光标位置的输入上下文:
- 有文本选中时:直接修改选中文本的字号
- 仅光标定位时:后续输入的文本自动继承该格式属性,同时不会改动已有文本的格式
测试验证:
- 在RichTextBox中输入“stackoverflow”,将光标定位到“stackover”与“flow”之间
- 选择字号20
- 输入“cool”,新输入的“cool”会以20号字显示,原有“stackoverflow”保持原字号不变
内容的提问来源于stack exchange,提问作者Basssprosse
相关产品推荐
相关产品推荐

