Я также недавно столкнулся с этой проблемой и преодолел ее с помощью
Создание ListBox ItemTemplate, содержащего ItemsControl, у которого есть WrapPanel в ItemsPanelTemplate, и затем привязка моей строки к ItemsSource элемента ItemsControl с помощью IValueConverter, в котором находится вся логика.
Разделите ваши слова и сделайте запрос / выполните поиск по строкам смайликов, гиперссылкам и т. Д., Создайте элементы TextBlock, Image, Hyperlink, Button и установите свои значения и дескрипторы событий.
В функции создайте Список , заполните Список сгенерированными вами элементами управления и верните Список как объект в функции Преобразовать IValueConverter.
Поскольку у вас есть WrapPanel, вы завершили упаковку.