2009-08-12 25 views
10

Trong ứng dụng WPF của tôi, tôi có điều này:Tiêu đề gói trong WPF siêu liên kết

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

Nhưng nếu tôi đặt HyperlinkText.Text đến một văn bản dài mà kết thúc tốt đẹp, toàn bộ văn bản được nhấn mạnh một lần duy nhất ở phía dưới (xem ảnh). Có cách nào để có mọi dòng được nhấn mạnh riêng biệt mà không cần gói thủ công không?

Trả lời

7

Cách dễ dàng hơn để đạt được điều đó là sử dụng Run thay vì TextBlock.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn, điều đó cũng hoạt động và đơn giản hơn rất nhiều. (Tôi đã phải di chuyển TextWrapping = "Wrap" từ TextBlock bên trong sang bên ngoài.) – svick

+0

Liên kết không hoạt động nữa ... – fmuecke

1

Thử thay đổi kiểu của Liên kết để loại bỏ gạch dưới. Sau đó, thêm một gạch dưới vào chính phong cách TextBlock bên trong.

+0

Chăm sóc để đăng một số mã? Tôi muốn thử điều này nhưng không chắc chắn làm thế nào để loại bỏ gạch dưới mà không vi phạm phần còn lại của phong cách. Và tôi lười :-) – stone

+0

@skypecakes: câu trả lời của levanovd là tốt hơn. Xem phần này để biết thêm thông tin: http://www.longhorncorner.com/UploadFile/raj1979/TextWPF01062009041311AM/TextWPF.aspx –

+0

Cảm ơn, Scott. Điều đó trông đầy hứa hẹn, nhưng tiếc là sẽ không làm việc cho tôi bởi vì tôi đang điền văn bản với một ràng buộc dữ liệu và trên .Net 3.5. Bạn không thể liên kết Run.Text trong 3.5. Tôi ít lười biếng hơn hôm nay vì vậy tôi sẽ xem những gì tôi có thể đưa ra và đăng các kết quả như là một câu trả lời cho câu hỏi của OP, nếu nó đủ tốt. – stone

12

Đây thực sự là một vấn đề gây phiền toái trong WPF. Tôi đã đi xa như vậy để gọi nó là một lỗi.

Như @levanovd đề cập trong câu trả lời của mình, bạn có thể có được một siêu liên kết đến quấn đúng cách bằng cách sử dụng một Run như các yếu tố bên trong:

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

này hoạt động tuyệt vời, cho đến khi bạn muốn áp dụng định dạng văn bản trong vòng siêu liên kết. Nếu bạn đã cố gắng để làm điều này, ví dụ:

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

Bạn sẽ nhận được một lỗi biên dịch:

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

Vì vậy, như @Scott Whitlock ghi chú khác, bạn phải sử dụng một TextBlock như các yếu tố bên trong và lộn xộn xung quanh với các TextDecoration thuộc tính của HyperlinkTextBlock thay vì:

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

Sigh. Tôi thực sự ghét phần tử Hyperlink của WPF. Nó không hoạt động như bạn mong đợi.

+1

Câu trả lời hay! Vâng tóm tắt! – Vincent

Các vấn đề liên quan