Мне потребовалось около трех часов, чтобы, наконец, понять это - после большой детективной работы, но теперь она идеально подходит для пикселей!
Похоже, что WPF в Windows XP и WPF в Windows 7 имеют не только разные шрифты по умолчанию лица , а также шрифт по умолчанию размеры .
- У меня была проблема, когда шрифты отображались в Windows XP иначе, чем в Windows 7. Это было очень важно, так как окончательный вывод был на принтер, и они должны были быть идентичными. Первоначально казалось, что проблема заключалась в разнице в межстрочном интервале.
- Да - у меня в Windows XP был установлен тот же шрифт, что и в Windows 7
- Да - я попробовал очень общий шрифт (Arial), но у меня все еще были те же проблемы.
- Да - одинаковое DPI на обеих машинах.
- Да - тот же результат, будь то на виртуальной машине (в режиме Windows XP) или на реальной машине с Windows XP.
В конце концов я обнаружил, что шрифты, в которых я указывал явный размер, выглядели одинаково в Windows XP, и только те, в которых я не указал явный размер, были разными.
Итак, вот как я это исправил в MainWindow.xaml
- с помощью ContentControl
для установки размера по умолчанию:
<Grid x:Name="LayoutRoot" Background="#FFDEDEDE" UseLayoutRounding="True">
<ContentControl FontFamily="Segoe UI" FontSize="12">
... window contents ...
</ContentControl>
</Grid>
Примечание: Если вы используете Смесь , вам может потребоваться ввести FontSize="12"
вручную. Если вы выберете его в конструкторе свойств, он удалит его, потому что он думает, что 12 уже по умолчанию!
Как я уже говорил, моим пунктом назначения был принтер - поэтому мне пришлось сделать то же самое для распечатанного элемента управления.
Где еще можно установить размер шрифта по умолчанию? Во всяком случае, у меня теперь рендеринг с идеальным пикселем в Windows XP и Windows 7, и они отличаются только отличиями сглаживания в чистом виде.
Примечание: UseLayoutRounding
не является частью моего решения, но я всегда использую его и для своего корневого элемента управления.