Выделить совпадения в тексте
Описание
Здравствуйте.
Пытаюсь сделать пользовательский поиск в тексте, то есть чтобы совпадения выделились жирным шрифтом. Поиск я уже делал и всё хорошо работает:
private void FilterRefresh(string text, string pattern)
{
if (!string.IsNullOrEmpty(text) && !string.IsNullOrEmpty(pattern))
{
TextBlock_Output.Text = Regex.Replace(text, $"{pattern}", $"[{pattern}]");
//Тут совпадения отмечаются вот так: [Это] совпадение, а это - нет.
}
else
{
TextBlock_Output.Text = text;
}
}
Только вот как сделать совпадения жирными с помощью C# а не XAML я не знаю. Нашёл решение проблемы для Windows Forms, для Xamarin, но только не для UWP.
Вопрос
Как можно решить эту проблему в UWP?
С UWP работаю первый день, прошу строго не судить.
Ответы (1 шт):
Автор решения: Арман
→ Ссылка
Прокопался в документациях, а так же часть взял отсюда, ну и собственно получаем такое решение:
Код
private void TextBox_Search_TextChanged(object sender, TextChangedEventArgs e)
{
pattern = TextBox_Search.Text;
RefreshFilter(text, pattern);
}
private void RefreshFilter(string text, string pattern)
{
string openSymbol = "[";
string closeSymbol = "]";
TextBlock_Output.Inlines.Clear();
string taggedText = Regex.Replace(text, pattern, $"{openSymbol}{pattern}{closeSymbol}");
string[] parts = taggedText.Split(new[] { openSymbol, closeSymbol }, StringSplitOptions.None);
bool insideTag = false;
foreach (string part in parts)
{
Run run = new Run
{
Text = part,
};
if (insideTag)
{
run.FontWeight = FontWeights.Bold;
}
else
{
run.FontWeight = FontWeights.Normal;
}
TextBlock_Output.Inlines.Add(run);
insideTag = !insideTag;
}
}
