我想根据用户搜索的文本更改文本的颜色,并忽略大小写字母
问题是,如果搜索文本在大小写字母方面不相同,则此代码将不起作用。
我希望得到关于如何以最佳方式改进代码的帮助,以便我知道如何为
忽略大写或小写字母的单词,并将单词原样放在TextBlock
后面。
因为我可以忽略大写或小写字母,但返回的单词与搜索文本中的一样
而且不像TextBlock
如果这个代码可以改进,我也希望得到一些一般性的建议。TextBox
是我的搜索文本,TextBlock
是我希望对其部分着色的文本
根据搜索结果
private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e)
{
var searchText = (sender as TextBox)?.Text;
if (!string.IsNullOrEmpty(searchText) && TextBlock.Text.Contains(searchText))
{
var splitText = Regex.Split(TextBlock.Text, searchText);
TextBlock.Text = string.Empty;
TextBlock.Inlines.Add(new Run { Text = splitText[0] });
for (var i = 1; i < splitText.Length; i++)
{
TextBlock.Inlines.Add(new Run { Text = searchText, Foreground = Brushes.Yellow });
TextBlock.Inlines.Add(new Run { Text = splitText[i] });
}
}
else
{
string normalText = TextBlock.Inlines.Aggregate(string.Empty, (current, line) => current + (line as Run)?.Text);
TextBlock.Inlines.Clear();
TextBlock.Text = normalText;
}
}
1条答案
按热度按时间e4eetjau1#
为了保持原文的大小写不变,这样如何
https://dotnetfiddle.net/c3cOwR
我们的想法是使用
IndexOf
来移动原始字符串中的位置,并在原始字符串上使用Substring
来获取其中的部分。编辑:
要知道列表的哪一部分是searchText,只需执行以下操作
在
mod
操作(i % 2 != 0)
上返回TRUE的项将是搜索文本的索引,因为列表中的每隔一个项就是搜索文本。在这里看到它的使用:
https://dotnetfiddle.net/PqHzms