Все измерения WPF выражены в пикселях (хотя не в точках экрана). Даже когда вы указываете FontSize
из TextRange
.
Внутренне, когда вы указываете что-то вроде FontSize="14pt"
в XAML, WPF использует LengthConverter
и изменяет это удвоенное значение на основе коэффициента, связанного с единицей измерения, которую вы даете. Таким образом, 11 умножается на 1.3333333, примерно. Таким образом, если вы передаете простое двойное значение свойству FontSize
, то в качестве единицы измерения используются пиксели.
Однако, если вы используете FontSize="14.0001pt"
, или умножаете точки на 1,3333334, или, возможно, просто добавляете 0,0001 к измерению пикселей, это смещает вещи настолько, что вы действительно получаете \ fs22 или \ fs28 (а не \ fs21 или \ fs27 соответственно). Это для случаев, когда вы устанавливаете размер в WPF.
Причина, по которой у вас есть \ fs22, Load (), Save () и затем \ fs21, связана с тем же. Парсер берет RTF и преобразует его в объекты WPF. Таким образом, 22 полупункта становятся чем-то вроде 14,666666666667 пикселей. При повторном сохранении () эти пиксели преобразуются обратно в другую единицу, но не очень правильно. 14,666666666667 пикселей становятся 21 полуточкой, но 14,6666674 пикселей становятся 22 полуточками, чего вы и хотели.
Возможно, эта информация даст вам представление о том, как получить RTF по-другому. Возможно, вы можете вместо этого получить XAML и преобразовать его. Возможно, есть хороший бесплатный конвертер XAML-в-RTF третьей части, который не имеет досадных ошибок округления.