-->

标+下划线内嵌在WPF一个RichTextBox(Superscript + Underline i

2019-10-22 23:39发布

我有一组我想放在肚里像这样一个RichTextBox的文字:

所以我用一个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());
}

然而,结果是像这样:

的问题是,改变文本的基线时是标/下标然后下划线变化到高度为好。 我想下划线留它在哪里,并为超级脚本发生为好。

我发现只有一个接近解决方案,它不这样做编程方式在这里 。

Answer 1:

我试图转换这是在链接中提到的相同的代码在这里 。 请参阅下面的代码。

   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;


Answer 2:

由于这似乎在RichTextBox的限制,最好的解决办法是在提议的第二个答案的问题,你挂即用,而不是正常的信件,用自己的, 统一标变种 :

“ST” 变成 “ˢᵗ”
“ND” 变为 “ⁿᵈ”

等等

你也应该删除基线设置:

//dateSuperscript.BaselineAlignment = BaselineAlignment.Superscript;


文章来源: Superscript + Underline inline in a RichTextBox in WPF