2010-08-16 2 views

ответ

4

решаемые ...

if (this.TextEditor.Selection.IsEmpty) 
    this.TextEditor.CurrentFontFamily = SelectedFont; 
else 
    this.TextEditor.Selection.ApplyPropertyValue(TextElement.FontFamilyProperty, SelectedFont); 
+0

Это решение основано на: http://stackoverflow.com/questions/1854703/how-to-set-richtextbox-font-for-the-next-text-to-be-written – tgr42

6

Как о чем-то вроде:

TextSelection text = richTextBox.Selection; 
if (!text.IsEmpty) 
{ 
    text.ApplyPropertyValue(RichTextBox.FontSizeProperty, value); 
} 
+0

Это, по крайней мере, размер шрифта. Возможно, это свойство для семейства шрифтов, если это то, что вы хотели изменить. – KrisTrip

+0

Практически там. Он работает для размера шрифта. Но для семейства шрифтов он изменяет весь абзац, а не только выбор. –

9

Я реализовал панель инструментов, которая может изменить размер шрифта, семья, цвет и т.д. То, что я нашел это детали может быть сложно с МОФ RichTextBox. Настройка шрифта выбора имеет смысл, но есть также свойства шрифта по умолчанию для текстового поля и текущие свойства каретки, с которыми можно бороться. Вот что я написал, чтобы заставить его работать в большинстве случаев с размером шрифта. Процесс должен быть одинаковым для fontfamily и fontcolor. Надеюсь, поможет.

public static void SetFontSize(RichTextBox target, double value) 
    { 
     // Make sure we have a richtextbox. 
     if (target == null) 
      return; 

     // Make sure we have a selection. Should have one even if there is no text selected. 
     if (target.Selection != null) 
     { 
      // Check whether there is text selected or just sitting at cursor 
      if (target.Selection.IsEmpty) 
      { 
       // Check to see if we are at the start of the textbox and nothing has been added yet 
       if (target.Selection.Start.Paragraph == null) 
       { 
        // Add a new paragraph object to the richtextbox with the fontsize 
        Paragraph p = new Paragraph(); 
        p.FontSize = value; 
        target.Document.Blocks.Add(p); 
       } 
       else 
       { 
        // Get current position of cursor 
        TextPointer curCaret = target.CaretPosition; 
        // Get the current block object that the cursor is in 
        Block curBlock = target.Document.Blocks.Where 
         (x => x.ContentStart.CompareTo(curCaret) == -1 && x.ContentEnd.CompareTo(curCaret) == 1).FirstOrDefault(); 
        if (curBlock != null) 
        { 
         Paragraph curParagraph = curBlock as Paragraph; 
         // Create a new run object with the fontsize, and add it to the current block 
         Run newRun = new Run(); 
         newRun.FontSize = value; 
         curParagraph.Inlines.Add(newRun); 
         // Reset the cursor into the new block. 
         // If we don't do this, the font size will default again when you start typing. 
         target.CaretPosition = newRun.ElementStart; 
        } 
       } 
      } 
      else // There is selected text, so change the fontsize of the selection 
      { 
       TextRange selectionTextRange = new TextRange(target.Selection.Start, target.Selection.End); 
       selectionTextRange.ApplyPropertyValue(TextElement.FontSizeProperty, value); 
      } 
     } 
     // Reset the focus onto the richtextbox after selecting the font in a toolbar etc 
     target.Focus(); 
    } 
2

Чтобы изменить семейство шрифтов для выбора в RichTextBox вы должны использовать это:

text.ApplyPropertyValue(Run.FontFamilyProperty, value); 

Выбранный текст в RichTextBox является объектом Run, поэтому необходимо использовать Run свойства зависимостей. Похоже, что это работает в Silverlight, так что в WPF должно быть одно и то же.

3

Чтобы получить текущее использование выбор:

Dim ГСЧ Как TextRange = Новый TextRange (YourRtfBox.Selection.Start, YourRtfBox.Selection.End)

А затем установите FontStyle:

RNG .ApplyPropertyValue (Inline.FontSizeProperty, YourFontSizeValue) rng.ApplyPropertyValue (Inline.FontFamilyProperty, YourFontFamilyValue)

Смежные вопросы