2009-08-12 18 views
10

W mojej aplikacji WPF mam to:Zawijanie tekstu w WPF hiperłącze

<StackPanel> 
    <TextBlock> 
    <Hyperlink> 
     <TextBlock TextWrapping="Wrap" Name="HyperlinkText" /> 
    </Hyperlink> 
    </TextBlock> 
</StackPanel> 

Ale jeśli ustawić HyperlinkText.Text do długiego tekstu, który otacza cały tekst jest podkreślony tylko raz na dole (patrz zdjęcie). Czy istnieje sposób na podkreślenie każdej linii osobno bez ręcznego owijania?

Odpowiedz

7

Łatwiejszym sposobem osiągnięcia tego jest użycie Run zamiast TextBlock.

Mam nadzieję, że to pomaga.

+0

Dzięki, że to też działa i jest o wiele prostsze. (Musiałem przenieść TextWrapping = "Wrap" z wewnętrznego bloku TextBlock na zewnętrzny.) – svick

+0

Link już nie działa ... – fmuecke

1

Spróbuj zmienić styl hiperłącze, aby usunąć podkreślenie. Następnie dodaj podkreślenie do samego wewnętrznego stylu TextBlock.

+0

Chcesz dodać trochę kodu? Chciałbym tego spróbować, ale nie wiem, jak usunąć podkreślenie bez łamania reszty stylu. I jestem leniwy :-) – stone

+0

@skypecakes: odpowiedź levanovda jest lepsza. Zobacz więcej informacji: http://www.longhorncorner.com/UploadFile/raj1979/TextWPF01062009041311AM/TextWPF.aspx –

+0

Dzięki, Scott. To wyglądało obiecująco, ale niestety nie zadziała, ponieważ zapełniam tekst wiązaniem danych i .Net 3.5. Nie można powiązać Run.Text w 3.5. Dzisiaj jestem mniej leniwy, więc zobaczę, co wymyślę i opublikuję wyniki jako odpowiedź na pytanie PO, jeśli jest wystarczająco dobre. – stone

12

To jest naprawdę, bardzo irytujący problem w WPF. Posunąłbym się do stwierdzenia, że ​​to błąd.

Jak @levanovd wspomniano w swojej odpowiedzi, można uzyskać hiperłącze do zawijania prawidłowo stosując Run jako wewnętrzny element:

<StackPanel> 
     <TextBlock TextWrapping="Wrap"> 
      <Hyperlink><Run>This is a really long hyperlink. Yeah, a really really long hyperlink, whaddaya think?</Run></Hyperlink> 
     </TextBlock> 
    </StackPanel> 

to działa świetnie, dopóki nie chcesz zastosować formatowanie tekstu ciągu hiperłącze. Jeśli próbował to zrobić, na przykład:

<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> 

Można by dostać się błąd kompilacji:

The object 'Run' already has a child and cannot add ''. 'Run' can accept only one child.

Tak, jak wspomniano @Scott Whitlock, trzeba użyć TextBlock jako elementu wewnętrznego i poeksperymentować z atrybutami TextDecoration z Hyperlink i TextBlock zamiast:

<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> 

Ech. Naprawdę nie cierpię elementu WPF Hyperlink. Po prostu nie działa tak, jak można się spodziewać.

+1

Dobra odpowiedź! Dobrze podsumowane! – Vincent

Powiązane problemy