2009-11-04 3 views
7

Я знаю, что TextBlock может представлять FlowDocument, например:Настройка WPF текста в TextBlock

<TextBlock Name="txtFont"> 
    <Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run> 
</TextBlock> 

Я хотел бы знать, как установить FlowDocument, который хранится в переменной к TextBlock. Я ищу что-то вроде:

string text = "<Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run>" 
txtFont.Text = text; 

Однако результат выполнения кода выше, что текст XAML представлен неанализируемые.


EDIT: Я предполагаю, что мой вопрос не был достаточно ясен. То, что я действительно пытаюсь для того чтобы достигнуть это:

  1. пользовательского ввода какой-нибудь текст в RichTextBox .
  2. Приложение сохраняет пользовательский ввод как FlowDocument из RichTextBox и сериализует его на диск.
  3. FlowDocument десериализуется с диска на переменную текст.
  4. Теперь, я хотел был бы иметь возможность представить текст потребителя в TextBlock.

Поэтому, насколько я понимаю, создавая новый объект Run и настройки параметров вручную не решить мою проблему.


Проблема заключается в том, что сериализации RichTextBox создает Раздел объект, который я не могу добавить к TextBlock.Inlines. Поэтому невозможно установить десериализованный объект в TextProperty of TextBlock.

ответ

3

Я знаю, что TextBlock может представить FlowDocument

Что заставляет вас думать, что? Я не думаю, что это правда ... Содержание TextBlock - это свойство Inlines, которое является InlineCollection. Поэтому он может содержать только Inline s ...Но в FlowDocument содержимое является свойством Blocks, которое содержит экземпляры Block. И Block не является Inline

5

создать и добавить объект, как показано ниже:

 Run run = new Run("Courier New 24"); 
     run.Foreground = new SolidColorBrush(Colors.Maroon); 
     run.FontFamily = new FontFamily("Courier New"); 
     run.FontSize = 24; 
     txtFont.Inlines.Add(run); 
+3

run.Foreground = Brushes.Maroon; – CannibalSmith

+0

истинный каннибал. Благодарю. :) – Blounty

+0

Благодарим за решение. См. Мое редактирование. – Elad

0

Если FlowDocument был десериализован, это означает, что у вас есть объект типа FlowDocument, верно? Попробуйте установить значение Text вашего TextBlock для этого значения. Конечно, вы не можете сделать это с помощью txtFont.Text = ..., так как это работает только для строк. Для других типов объектов, вам необходимо установить DependencyProperty непосредственно:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument) 
0

Вот как мы настраиваем внешний вид текстового блока, назначая стиль «на лету».

// Set Weight (Property setting is a string like "Bold") 
    FontWeight thisWeight = (FontWeight)new FontWeightConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontWeightValue); 

    // Set Color (Property setting is a string like "Red" or "Black") 
    SolidColorBrush thisColor = (SolidColorBrush)new BrushConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontColorValue); 

    // Set the style for the dealer message 
    // Font Family Property setting is a string like "Arial" 
    // Font Size Property setting is an int like 12, a double would also work 
    Style newStyle = new Style 
    { 
     TargetType = typeof(TextBlock), 
     Setters = { 
      new Setter 
      { 
       Property = Control.FontFamilyProperty, 
       Value = new FontFamily(Properties.Settings.Default.DealerMessageFontValue) 
      }, 
      new Setter 
      { 
       Property = Control.FontSizeProperty, 
       Value = Properties.Settings.Default.DealerMessageFontSizeValue 
      }, 
      new Setter 
      { 
       Property = Control.FontWeightProperty, 
       Value = thisWeight 
      }, 
      new Setter 
      { 
       Property = Control.ForegroundProperty, 
       Value = thisColor 
      } 
     } 
    }; 

    textBlock_DealerMessage.Style = newStyle; 

Вы можете исключить раздел стилей и установить свойства напрямую, но нам нравится держать вещи в комплекте в стиле, чтобы помочь нам организовать внешний вид на протяжении всего проекта.

textBlock_DealerMessage.FontWeight = thisWeight; 

HTH.

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