C# WPF Richtextbox字体面/字体大小
我目前正试图在WPF项目中创建一些基本的字处理器功能。我使用的是RichTextBox,我知道所有的编辑命令(ToggleBold、ToggleItalic…等等)。我一直坚持的一点是允许用户更改字体大小和字体面,就像在MS Office中,值仅针对选定的文本更改,如果没有选定的文本,则值将针对当前插入符号位置更改。我已经想出了一个相当多的代码来让这个工作,但我有问题,并没有选择文本的东西。下面是我为RichTextBox.Selection所做的操作C# WPF Richtextbox字体面/字体大小,c#,wpf,styles,richtextbox,C#,Wpf,Styles,Richtextbox,我目前正试图在WPF项目中创建一些基本的字处理器功能。我使用的是RichTextBox,我知道所有的编辑命令(ToggleBold、ToggleItalic…等等)。我一直坚持的一点是允许用户更改字体大小和字体面,就像在MS Office中,值仅针对选定的文本更改,如果没有选定的文本,则值将针对当前插入符号位置更改。我已经想出了一个相当多的代码来让这个工作,但我有问题,并没有选择文本的东西。下面是我为RichTextBox.Selection所做的操作 TextSelection text =
TextSelection text = richTextBox.Selection;
if (text.IsEmpty)
{
//doing this will change the entire word that the current caret position
//is on which is not the desire/expected result.
text.ApplyPropertyValue(RichTextBox.FontSizeProperty, value);
}
else
//This works as expected.
text.ApplyPropertyValue(RichTextBox.FontSizeProperty, value);
所以我的问题是我应该怎么做?有更好/更方便的方法吗?我的一个想法是,我需要在段落中插入一个新的内联,但我不知道怎么做。感谢您的帮助。多谢各位
完整免责声明:这是对7个月前问题的准确回复。我在寻找完全相同问题的解决方案时发现了它,但是这个问题没有得到回答,我希望现在有人能够回答它。试试这个:
private void ChangeTextProperty(DependencyProperty dp, string value)
{
if (mainRTB == null) return;
TextSelection ts = mainRTB.Selection;
if (ts.IsEmpty)
{
TextPointer caretPos = mainRTB.CaretPosition;
TextRange tr = new TextRange(caretPos, caretPos);
tr.Text = " ";
tr.ApplyPropertyValue(dp, value);
}
else
{
ts.ApplyPropertyValue(dp, value);
}
}
我希望它能成功好的,刚刚找到答案:
private void ChangeTextProperty(DependencyProperty dp, string value)
{
if (mainRTB == null) return;
TextSelection ts = richTextBox.Selection;
if (ts!=null)
ts.ApplyPropertyValue(dp, value);
richTextBox.Focus();
}
您可以在将新值应用于TextRange后,通过调用其focus()方法显式地将焦点重新设置为RichTextBox,或者更好地使工具栏项不可聚焦。例如,如果有字体大小的组合框:
<ComboBox x:Name="FontSizeSelector" Focusable="False" />
我考虑过这个选项,但它在文本末尾添加了一个空格。如果我随后删除该空格,字体更改效果将消失。
text.ApplyPropertyValue(RichTextBox.FontSizeProperty, value);