我正在创建一个Windows Phone 8.1应用程序,其中app为用户提供了一个文本框。我想突出显示文本框中使用不同颜色的所有主题标签。 因此,只要用户在屏幕上按下散列(#),字体颜色就会改变,直到用户按下空格键。 例如,用户输入:
This is a #sample statement.
字体颜色对于文本部分保持黑色"这是",但是一旦用户按下#键,颜色变为红色(包括散列本身),所有后续字符都是红色字体。 所以#sample以读取颜色显示。一旦用户在单词样本后按空格,字体颜色将变为黑色,所有剩余文本显示为黑色。 我怎样才能做到这一点?我尝试更改字体颜色,然后更改整个文本而不仅仅是标签。
答案 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;
}
}
显然,你可以更好地优化它。它不支持格式化粘贴文本,这是一个练习:)
答案 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>