UIElements WPF, встроенные в текст “Украшения”
Вопрос
В WPF, как я могу поместить обычный UIElement
s встроено в текст?Например, определенная классификация текста заменила бы интервал текста выпадающим списком, содержащим определенные параметры.
Я использовал такие объекты, как Span, Bold, Hyperlink, которые вносят некоторые незначительные изменения в текст inline, но я хочу иметь возможность сделать что-то более радикальное и нестандартное.Могу ли я реализовать аналогичный встроенный объект для достижения этой цели?
Я работаю над проектом, где мне нужны некоторые расширенные текстовые визуальные эффекты.В частности, я хочу сделать что-то похожее на редактор исходных текстов на основе Visual Studio 2010 WPF.
У меня будет фрагмент текста, и различные компоненты будут просматривать этот текст в поисках фрагментов с особым значением.Когда он найдет интервал текста, он запишет / пометит этот интервал.Затем другой набор компонентов проследует по классифицированному тексту и добавит украшения на основе их классификации.
Вы можете представить это как смарт-теги для WPF.
Я действительно понятия не имею, с чего начать, вся документация по расширенному тексту в WPF посвящена анимации, пользовательским кистям, преобразованию в геометрию и т.д...
Решение
Взгляните на InlineUIContainer
и BlockUIContainer
классы.Они позволяют UIElement
s, которые должны быть встроены в содержимое потока, например FlowDocument
или TextBlock
.
Вот пример кнопки, встроенной в TextBlock
:
<TextBlock>
Some inline
<InlineUIContainer>
<Button Content="Hi" Click="Button_Click" />
</InlineUIContainer>
inside the text.
</TextBlock>