RichTextBox.Selection和TextSelection.ApplyPropertyValue的问题

时间:2016-11-08 09:52:50

标签: c# wpf richtextbox

我正在尝试使用RichTextBox在WPF中创建文本编辑器。 我的问题是改变我的文字的字体大小。我的代码在每种情况下都按预期工作,除非光标位于单词内。在这种情况下,它不应该更改任何内容的字体大小,除非用户写入任何内容时要来的文本的字体大小。问题在于,由于某种原因,td会在光标位于单词内时更改整个单词的字体大小。

这是我的eventHandler:

TextSelection.ApplyPropertyValue(RichTextBox.FontSizeProperty, value)

我不能使用在if语句中添加private void fontSizeBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox comboBox = (ComboBox)sender; string value = (string)comboBox.SelectedValue; if (comboBox.IsDropDownOpen) { TextSelection text = textBoxMain.Selection; richTextBox.Focus(); text.ApplyPropertyValue(RichTextBox.FontSizeProperty, value); } } 之类的东西,因为我仍然需要能够更改要写入的文本的字体大小。

我在StackOverFlow上发现了类似的问题,但没有一个有实际的工作答案。

编辑:添加XAML

!text.Text.IsEmpty

1 个答案:

答案 0 :(得分:0)

无法将属性值简单应用于无文本选择。看看你将它应用到一个真正的选择时得到的结果:假设你有一个文本“你好勇敢的新世界”。 RTB内的文档看起来像这样(简化)

<FlowDocument>
  <Paragraph>
    <Run>hello brave new world</Run>
  </Paragraph>
</FlowDocument>

当您选择“勇敢”并更改字体大小(或其他任何内容)时,文档将更改为

<FlowDocument>
  <Paragraph>
    <Run>hello </Run>
    <Run FontSize="20">brave</Run>
    <Run> new world</Run>
  </Paragraph>
</FlowDocument>

必须将某个属性应用于某些文字;根据你的要求,没有办法改变“没有”。如果你想达到最接近你要求的东西,你必须自己拆分文件 - 当选择为空时 - 并创建一个具有所需字体大小的空运行。所以上面的例子看起来像这样(假设,插入符号位于“勇敢”之前):

<FlowDocument>
  <Paragraph>
    <Run>hello </Run>
    <Run FontSize="20"></Run>
    <Run>brave new world</Run>
  </Paragraph>
</FlowDocument>

由于这会留下无限的可能性来结束无数次“空”运行,我建议修改你的要求。