Перенос текста в гиперссылку WPF
В моем приложении WPF у меня есть это:
<StackPanel>
<TextBlock>
<Hyperlink>
<TextBlock TextWrapping="Wrap" Name="HyperlinkText" />
</Hyperlink>
</TextBlock>
</StackPanel>
Но если я установлю HyperlinkText.Text
для длинного текста, который переносится, весь текст подчеркивается только один раз внизу (см. изображение). Есть ли способ выделить каждую строку отдельно без переноса вручную?
3 ответа
Более простой способ добиться этого - использовать Run вместо TextBlock.
Надеюсь, поможет.
Это действительно очень раздражающая проблема в WPF. Я бы зашел так далеко, что назвал это ошибкой.
Как упомянул @levanovd в своем ответе, вы можете получить гиперссылку для правильного переноса, используя Run
как внутренний элемент:
<StackPanel>
<TextBlock TextWrapping="Wrap">
<Hyperlink><Run>This is a really long hyperlink. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink>
</TextBlock>
</StackPanel>
Это прекрасно работает, пока вы не захотите применить форматирование текста в гиперссылке. Если вы пытались сделать это, например:
<StackPanel>
<TextBlock TextWrapping="Wrap">
<Hyperlink><Run>This is a really long <Run TextWeight="Bold">hyperlink</Run>. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink>
</TextBlock>
</StackPanel>
Вы получите ошибку компиляции:
Объект "Выполнить" уже имеет дочерний элемент и не может добавить "". "Бег" может принять только одного ребенка.
Итак, как отметил @ Скотт Уитлок, вы должны использовать TextBlock
в качестве внутреннего элемента и возиться с TextDecoration
атрибуты Hyperlink
а также TextBlock
вместо:
<StackPanel>
<TextBlock>
<Hyperlink TextDecorations="None"><TextBlock TextWrapping="Wrap" TextDecorations="Underline">This is a really long <Run FontWeight="Bold">hyperlink</Run>. Yeah, a really really long hyperlink, whaddaya think?</TextBlock></Hyperlink>
</TextBlock>
</StackPanel>
Вздох. Я действительно ненавижу WPF Hyperlink
элемент. Это просто не работает так, как вы ожидаете.
Попробуйте изменить стиль гиперссылки, чтобы удалить подчеркивание. Затем добавьте подчеркивание к самому внутреннему стилю TextBlock.