2009-08-09 38 views
15

Tôi đang cố tạo một Siêu kết nối có chứa văn bản với siêu và/hoặc các bảng con. Tôi đã tìm thấy hai cách để làm điều này, và cả hai đều hút.Siêu văn bản/chỉ số trong siêu liên kết trong WPF

Giải pháp # 1: sử dụng Typography.Variants. Điều này mang lại một siêu chữ số tuyệt vời ... cho một số phông chữ.

<StackPanel> 
    <TextBlock FontFamily="Palatino Linotype" FontSize="30"> 
    <Hyperlink>R<Run Typography.Variants="Superscript">2</Run></Hyperlink> 
    (Palatino Linotype) 
    </TextBlock> 
    <TextBlock FontFamily="Segoe UI" FontSize="30"> 
    <Hyperlink>R<Run Typography.Variants="Superscript">2</Run></Hyperlink> 
    (Segoe UI) 
    </TextBlock> 
</StackPanel> 

http://www.excastle.com/misc/wpf-superscript-fontvariants.png

Trông đẹp trong Palatino Linotype; nhưng đối với các phông chữ không hỗ trợ các biến thể, nó đơn giản bị bỏ qua, không có mô phỏng nào được thực hiện và văn bản có kích thước đầy đủ, ở mức cơ bản, 100% bình thường. Tôi muốn cho phép người dùng cuối của tôi chọn phông chữ họ muốn sử dụng và vẫn có siêu/đăng ký hoạt động.

Giải pháp # 2: sử dụng BaselineAlignment. Điều này làm tăng hoặc giảm văn bản một cách thích hợp, mặc dù không giống như giải pháp # 1, tôi phải giảm kích thước phông chữ theo cách thủ công. Tuy nhiên, nó có hiệu quả cho tất cả các phông chữ. Vấn đề là gạch dưới của Hyperlink.

<TextBlock FontSize="30" FontFamily="Palatino Linotype"> 
    <Hyperlink> 
    R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run> 
    </Hyperlink> 
</TextBlock> 

http://www.excastle.com/misc/wpf-superscript-baselinealignment.png

Các gạch dưới được nâng lên và hạ xuống cùng với các văn bản, trông khá tồi tệ. Tôi muốn có một gạch chân liên tục, không gián đoạn dưới toàn bộ Hyperlink. (Và trước khi bất kỳ ai đề xuất một Border, tôi cũng muốn Hyperlink có thể word-wrap, với tất cả các từ được gạch dưới, bao gồm cả hàng đầu tiên.)

Có cách nào để làm việc siêu văn bản và subscript trong WPF, trong bất kỳ phông chữ nào, không có vẻ buồn cười khi gạch dưới?

Trả lời

12

Nếu siêu liên kết sẽ không quấn lên hơn một dòng, sau đó nhúng TextBlock khác có thể làm việc:

<TextBlock FontSize="30" FontFamily="Palatino Linotype"> 
    <Hyperlink> 
    <TextBlock> 
     R<Run BaselineAlignment="Superscript" FontSize="12pt">2</Run> 
    </TextBlock> 
    </Hyperlink> 
</TextBlock> 

này sẽ cung cấp một siêu liên kết vững chắc dưới con của Hyperlink, có nghĩa là một siêu liên kết không gián đoạn:

http://www.excastle.com/misc/wpf-superscript-baselinealignment-better.png

Tuy nhiên, nếu TextBlock nhúng cần phải quấn đến nhiều dòng, bạn sẽ chỉ ge t một gạch dưới dưới toàn bộ đoạn bọc, thay cho gạch dưới mỗi dòng văn bản:

http://www.excastle.com/misc/wpf-superscript-baselinealignment-badwrap.png

Nếu bạn có thể đặt một TextBlock chỉ xung quanh một chút ngắn của nội dung cần superscript - ví dụ, xung quanh chỉ là R^2 trong ví dụ trên - và để phần còn lại của văn bản được parented với siêu liên kết, sau đó bạn nhận được gạch dưới như bình thường. Nhưng đôi khi điều đó không thực tế, vì vậy nó là một cái gì đó để xem ra cho.

1

Bạn có thể sử dụng ký tự unicode thay thế (ví dụ:http://www.fileformat.info/info/unicode/char/b2/index.htm)

Như thế này:

<TextBlock FontSize="30" FontFamily="Segoe UI"> 
    <Hyperlink> 
     Apply R² Calculation 
    </Hyperlink> 
</TextBlock> 

Kết quả:

Result image

Rõ ràng điều này sẽ không làm việc trừ khi những gì bạn đang siêu kịch bản thực sự có một nhân vật superscript unicode.

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