C# 如何在C Wpf MVVM中基于textblock中的特殊字符拆分字符串后使用内联线

C# 如何在C Wpf MVVM中基于textblock中的特殊字符拆分字符串后使用内联线,c#,wpf,string,split,C#,Wpf,String,Split,我有一个段落包含“:”和“\n”。 我想先在“\n”上分隔stringa段落,然后根据“:”分隔stringa段落 然后需要加粗介于\n和之间的字符串: 例如: **确定的**冠词**是单词**:它将名词的含义限定为一个特定的事物。例如,您的朋友可能会问:“您这个周末要参加聚会吗?”\r\n **定冠词**:它告诉您您的朋友指的是您双方都知道的特定的一方。\r\n **定冠词**:可与单数、复数或不可数名词连用 如何用粗体创建特定字符串。该段落是动态的。幸运的是,文本块支持内联格式。所以我看到两

我有一个段落包含“:”和“\n”。 我想先在“\n”上分隔stringa段落,然后根据“:”分隔stringa段落 然后需要加粗介于\n和之间的字符串:

例如: **确定的**冠词**是单词**:它将名词的含义限定为一个特定的事物。例如,您的朋友可能会问:“您这个周末要参加聚会吗?”\r\n **定冠词**:它告诉您您的朋友指的是您双方都知道的特定的一方。\r\n **定冠词**:可与单数、复数或不可数名词连用

如何用粗体创建特定字符串。该段落是动态的。

幸运的是,文本块支持内联格式。所以我看到两种情况,我的一般方法会假设,行的开头和第一个冒号之间的每一行的文本都必须是粗体的,除了那一行没有冒号

它看起来是这样的:

var lines = txt.Split('\n');

foreach(var line in lines)
{
    var parts = line.Split(':');
    for(int i = 0; i<parts.Length; i++)
    {
        txBlock1.Inlines.Add(
            new Run($"{parts[i]}{(i<parts.Length - 1 ? ":" : "\n")}")
                { FontWeight = (i==0 && parts.Length>1) ?  FontWeights.Bold : FontWeights.Regular});
    }
}
但是,如果您确实可以预期字符串的格式是这样的,即每行中只有一个冒号,那么您可以将其缩短一点:

var erg = txt.Split(new char[] { '\n', ':'});
for(int i = 0; i<erg.Length;i++)
{
    var isEven = (i & 1) == 0;
    txBlock1.Inlines.Add(
        new Run($"{erg[i]}{(isEven ? ":" : "\n")}")
        { FontWeight = isEven ? FontWeights.Bold : FontWeights.Regular });
}

您希望显示文本的“输出控件”是什么?因为同一控件内的不同fomatting对于所有类型的控件来说可能都不是微不足道的。@AndreasH。它是一个文本块。一个单独的文本块