Tất cả các phép đo của WPF tính bằng pixel (mặc dù không chính xác pixel màn hình). Ngay cả khi bạn chỉ định số FontSize
của số TextRange
.
Nội bộ, khi bạn chỉ định một cái gì đó như FontSize="14pt"
trong XAML, WPF sử dụng LengthConverter
và các thay đổi đủ điều kiện kép dựa trên yếu tố liên quan đến đơn vị đo bạn cung cấp. Vì vậy, 11 được nhân với 1.3333333, khoảng. Vì vậy, nếu bạn cho một giá trị gấp đôi đơn giản vào thuộc tính FontSize
, đơn vị là pixel. Tuy nhiên, nếu bạn sử dụng FontSize="14.0001pt"
hoặc nhân các điểm bằng 1.3333334 hoặc thậm chí chỉ cần thêm 0,0001 vào phép đo pixel, nó sẽ bù đắp đủ thứ mà bạn thực sự nhận được \ fs22 hoặc \ fs28 (thay vì \ fs21 hoặc \ fs27, tương ứng). Điều này là dành cho khi bạn đang thiết lập một kích thước trong WPF.
Lý do bạn có \ fs22, Tải(), Lưu() và sau đó có \ fs21 phải thực hiện tương tự. Trình phân tích cú pháp lấy RTF và chuyển đổi nó thành các đối tượng WPF. Vì vậy, 22 nửa điểm trở thành một cái gì đó giống như 14.666666666667 pixel. Khi bạn Save() một lần nữa, những pixel đó được chuyển đổi trở lại một đơn vị khác, nhưng không chính xác lắm. 14.666666666667 pixel trở thành 21 điểm, nhưng 14.6666674 pixel trở thành 22 điểm nửa, đó là những gì bạn muốn.
Có thể thông tin này sẽ cung cấp cho bạn ý tưởng cách nhận RTF khác nhau. Có lẽ bạn có thể lấy XAML ra và thay đổi nó. Có thể có phần mềm chuyển đổi XAML-to-RTF miễn phí thứ ba không có lỗi làm tròn gây phiền nhiễu.
Nguồn
2009-08-19 19:36:30
Vâng, một điều tôi coi là khả năng là: 1. Nhận XAML từ 'RichTextBox'; 2. Sửa đổi nó bằng cách thêm 0,001 cho mỗi kích thước phông chữ; 3. Sử dụng mã (dễ dàng tìm thấy) để chuyển đổi XAML thành RTF với các lớp dựng sẵn. Bằng cách đó bạn đang tinh chỉnh đầu vào để đầu ra của bạn là những gì bạn muốn. –