Wszystkie pomiary WPF są w pikselach (chociaż nie są to piksele ekranu). Nawet jeśli podasz FontSize
z FontSize
z FontSize
.
Wewnętrznie, podając w XAML coś takiego jak FontSize="14pt"
, WPF używa LengthConverter
i zmienia podwójne kwalifikacje w oparciu o współczynnik związany z podaną jednostką miary. Więc 11 zostaje pomnożone przez około 1,3333333. Jeśli więc podasz zwykłą podwójną wartość do właściwości FontSize
, jednostką są piksele.
Jeśli jednak użyjesz FontSize="14.0001pt"
lub pomnożysz punkty przez 1.3333334, a może po prostu dodasz 0,0001 do pomiaru pikseli, to przesunie on rzeczy na tyle, że faktycznie uzyskasz \ fs22 lub \ fs28 (zamiast \ fs21 lub \ fs27, odpowiednio). Jest tak w przypadku ustawiania rozmiaru w WPF.
Powód, dla którego masz \ fs22, Load(), Save(), a następnie \ fs21 ma do czynienia z tym samym. Parser pobiera RTF i przekształca go w obiekty WPF. Tak więc 22 półprocentowe stają się czymś w rodzaju 14,666666666667 pikseli. Po ponownym zapisaniu() te piksele zostaną przekonwertowane z powrotem na inną jednostkę, ale niezbyt poprawnie. 14.666666666667 piksele stają się 21 punktami, ale 14,6666674 pikseli stają się 22 punktami, co jest tym, czego potrzebujesz.
Może ta informacja da ci pomysł, jak uzyskać RTF w inny sposób. Może zamiast tego możesz pobrać XAML i przekonwertować go. Może jest fajny darmowy konwerter XAML-to-RTF trzeciej części, który nie ma denerwujących błędów zaokrąglania.
Cóż, jedna rzecz, którą rozważałem jako możliwość, była następująca: 1. Pobierz XAML z 'RichTextBox'; 2. Zmodyfikuj go, dodając 0,001 do każdego rozmiaru czcionki; 3. Użyj kodu (łatwo znaleźć), aby przekonwertować XAML na RTF z wbudowanymi klasami. W ten sposób poprawiasz dane wejściowe, dzięki czemu Twoje wyniki są zgodne z oczekiwaniami. –