一部分的文本用不同的颜色在windows phone 8.1

时间:2014-12-02 11:22:22

标签: c# xaml windows-phone-8.1

我正在创建一个Windows Phone 8.1应用程序,其中app为用户提供了一个文本框。我想突出显示文本框中使用不同颜色的所有主题标签。 因此,只要用户在屏幕上按下散列(#),字体颜色就会改变,直到用户按下空格键。 例如,用户输入:

This is a #sample statement.

字体颜色对于文本部分保持黑色"这是",但是一旦用户按下#键,颜色变为红色(包括散列本身),所有后续字符都是红色字体。 所以#sample以读取颜色显示。一旦用户在单词样本后按空格,字体颜色将变为黑色,所有剩余文本显示为黑色。 我怎样才能做到这一点?我尝试更改字体颜色,然后更改整个文本而不仅仅是标签。

2 个答案:

答案 0 :(得分:3)

为什么不使用RichEditBox?这是我很快就掀起的事情:

<RichEditBox x:Name="tb" TextChanged="tb_TextChanged" />
private void tb_TextChanged(object sender, RoutedEventArgs e)
{
    // we don't want this handler being called as a result of
    // formatting changes being made here
    tb.TextChanged -= tb_TextChanged;

    var doc = tb.Document;
    doc.BatchDisplayUpdates();

    try
    {
        string text;
        doc.GetText(TextGetOptions.None, out text);
        if (text.Length == 0)
            return;

        // check if this word starts with a hash
        var start = doc.Selection.StartPosition - 1;
        while (true)
        {
            if (start < 0 || char.IsWhiteSpace(text[start]))
                return;
            if (text[start] == '#')
                break;
            start--;
        }

        // find the end of the word
        var end = doc.Selection.StartPosition;
        while (start < text.Length && !char.IsWhiteSpace(text[end]))
            end++;

        // set color
        doc.GetRange(start, end).CharacterFormat.ForegroundColor = Colors.RoyalBlue;
    }
    finally
    {
        doc.ApplyDisplayUpdates();
        tb.TextChanged += tb_TextChanged;
    }
}

Screenshot

显然,你可以更好地优化它。它不支持格式化粘贴文本,这是一个练习:)

答案 1 :(得分:0)

将此XAML格式用于不同颜色的文本

> <TextBlock FontSize="30">
>             <Run Foreground="Red" Text="Hi "></Run>
>             <Run Foreground="Green" Text="This "></Run>
>             <Run Foreground="Blue" Text="is "></Run> 
              <Run Foreground="White" Text="Color."></Run> </TextBlock>

enter image description here