Перенос текста в гиперссылке 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>
вы получите ошибку компиляции:
объект "Бег" уже имеет ребенка и не может добавить ". "Бег" может принять только одного ребенка.
Итак, как отметил @Scott Whitlock, вы должны использовать 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.