WPF UIElements, встроенный в текст «Украшения»

Как в WPF поместить обычные UIElement s в текст? Например, определенная классификация текста заменит фрагмент текста раскрывающимся списком, содержащим определенные параметры.

Я использовал такие объекты, как Span, Bold, Hyperlink, которые вносят небольшие изменения в текст, встроенный в строку, но я хочу иметь возможность сделать что-то более радикальное и нестандартное. Могу ли я реализовать для этого аналогичный объект Inline?

Я работаю над проектом, в котором мне нужны расширенные визуальные эффекты для текста. В частности, я хочу сделать что-то похожее на редактор исходного кода Visual Studio 2010 на основе WPF.

У меня будет фрагмент текста, и различные компоненты будут искать в нем фрагменты со специальным значением. Когда он найдет отрезок текста, он запишет / пометит этот отрезок. Затем другой набор компонентов будет проходить по классифицированному тексту и добавлять украшения на основе их классификации.

Вы можете думать об этом как о смарт-тегах для WPF.

Я действительно понятия не имею, с чего начать, вся документация по расширенному тексту в WPF посвящена анимации, настраиваемым кистям, преобразованию в геометрию и т. Д.

Ответов (1)

Решение

Возьмите взгляд на InlineUIContainerи BlockUIContainerклассах. Они позволяют UIElement встраивать s в содержимое потока, например FlowDocument или TextBlock .

Вот пример кнопки, встроенной в TextBlock :

<TextBlock>
    Some inline
    <InlineUIContainer>
        <Button Content="Hi" Click="Button_Click" />
    </InlineUIContainer>
    inside the text.
</TextBlock>