Форматирование текста в C # с XNA - PullRequest
1 голос
/ 18 мая 2010

В настоящее время я пытаюсь создать TextBox для моего GUI с помощью XNA, и мне было интересно, как я могу найти теговый текст в строке. Например, у меня есть такой текст:

Hey there, I was <r>going to</r> the <b>Mall</b> today!

Таким образом, тег <r> будет представлять красный текст, а тег <b> будет представлять синий текст.
И я хочу точно знать, где начинается красный текст и где начинается синий, чтобы я мог отобразить их отдельно.
Есть ли у вас какие-либо предложения, что с этим делать, и что для этого нужно?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Я бы предложил сделать это двумя способами

Во-первых, есть метод, который может взять вашу строку и вернуть коллекцию пар цветовых строк:

struct StringColorPair {
    public string myText;     // the text
    public Color myColor;     // the color of this text
    public int myOffset;      // characters before this part of the string 
                              // (for positioning in the Draw)
}

public List<StringColorPair> ParseColoredText(string text) {
    var list = new List<StringColorPair>();    

    // Use a regex or other string parsing method to pull out the
    // text chunks and their colors and then for each set of those do:
    list.Add(
        new StringColorPair {
            myText = yourParsedSubText,
            myColor = yourParsedColor,
            myOffset = yourParsedOffset }
    );

    return list;
}

Тогда вам понадобится метод рисования, подобный этому:

public void Draw(List<StringColorPair> pairs) {
    foreach(var pair in pairs) {
        // Draw the relevant string and color at its needed offset
    }
}
0 голосов
/ 20 июня 2010

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

...