Перенос текста в гиперссылке 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.