2015-05-04 3 views
1

У меня есть набор текста, который я хотел бы поставить в RichTextBox, который идет как так:Надстрочные + Подчеркнутый инлайн в RichTextBox в WPF

Result I want to see

Так что я использовал RichTextBox, так как это позволяет мне нужно сделать следующее.

var zipCodeParagraph = new Paragraph(); 
string zipCodes = String.Empty; 

var dateRun = new Underline(new Run(DateTime.Today.DayOfWeek + ", " + CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(DateTime.Today.Month) + ' ' + DateTime.Today.Day)); 
Underline dateSuperscript; 

switch (DateTime.Today.Day % 10) 
{ 
    case 1: 
     dateSuperscript = new Underline(new Run("st")); 
     break; 
    case 2: 
     dateSuperscript = new Underline(new Run("nd")); 
     break; 
    case 3: 
     dateSuperscript = new Underline(new Run("rd")); 
     break; 
    default: 
     dateSuperscript = new Underline(new Run("th")); 
     break; 
} 

dateSuperscript.BaselineAlignment = BaselineAlignment.Superscript; 

if (ZipCodes.Any()) 
{ 
    zipCodeParagraph.Inlines.Add(new Run("The following zip codes are facing a ")); 
    zipCodeParagraph.Inlines.Add(new Underline(new Run("Severe Weather Threat"))); 
    zipCodeParagraph.Inlines.Add(new Run(" on ")); 
    zipCodeParagraph.Inlines.Add(dateRun); 
    zipCodeParagraph.Inlines.Add(dateSuperscript); 
    zipCodes = String.Join(", ", ZipCodes.ToArray()); 
} 

Исход, однако, например, так:

Result I am getting

Проблема заключается в том, что при изменении исходных условий текста, чтобы быть верхний индекс/нижний индекс, то подчеркивание изменения в той высоте, а также. Я бы хотел, чтобы подчеркивание оставалось там, где оно есть, и для супер-скриптинга.

Я нашел только одно близкое решение, которое не делает это программно here.

ответ

1

Я пытался преобразовать тот же код, который указан в ссылке here. См. Приведенный ниже код.

FlowDocument mcFlowDoc = new FlowDocument(); 
     Hyperlink hyp = new Hyperlink(); 
     hyp.Foreground = Brushes.Black; 
     TextBlock txt = new TextBlock(); 
     txt.Foreground = Brushes.Black; 
     txt.Text = "Friday,April 10";   
     Run rn = new Run("th"); 
     rn.BaselineAlignment = BaselineAlignment.Superscript; 
     txt.Inlines.Add(rn); 
     hyp.Inlines.Add(txt);    
     Paragraph para = new Paragraph(); 
     para.Inlines.Add(new Run("The following zip codes are facing a ")); 
     para.Inlines.Add(new Underline(new Run("Severe Weather Threat"))); 
     para.Inlines.Add(new Run(" on ")); 
     para.Inlines.Add(hyp); 
     mcFlowDoc.Blocks.Add(para); 
     RichTextBox mcRTB = new RichTextBox(); 
     mcRTB.Width = 560; 
     mcRTB.Height = 100; 
     mcRTB.Document = mcFlowDoc; 
+0

Это сработало! Большое спасибо! :) – AzzamAziz

1

Как это кажется ограничение RichTextBox, лучшим решением было бы одна предложенная в second answer вопроса вы связаны, а именно вместо нормальных букв, чтобы использовать их Unicode superscript variants:

«ул» становится "ˢᵗ"
"й" становится "ⁿᵈ"

т.д.

Вы должны также удалить базовый параметр:

//dateSuperscript.BaselineAlignment = BaselineAlignment.Superscript; 
Смежные вопросы