WPF по-разному отображается в Windows XP против Windows 7
Почему WPF отображается по-разному в Windows XP и Windows 7?
Я использую .NET SP1 на обоих компьютерах..
мой макет похож на это окно, которое не имеет панели инструментов и настроено на максимизацию, чтобы оно соответствовало всему экрану.
под этим у меня есть Viewbox, установленный для использования Stretch: Uniform, и под этим у меня есть мой LayoutRoot.
таким образом, я надеялся получить один и тот же макет на всех компьютерах, но, похоже, он не отображает точно то же самое на Windows XP. Некоторые элементы немного меньше, и макет не выглядит так здорово.
Я попытался изменить мое resoulution на моем компьютере Windows 7 на то же, что и компьютер Windows XP, и он сохраняет макет, как это должно быть.
и оба компьютера используют 96 DPI.
4 ответов
мой опыт работы:
Я не уверен, что это проблема, я заметил, что Windows 7 использует аппаратное ускорение для рисования приложения WPF. Windows XP не делает.
вы можете проверить, так ли это, используя что-то вроде этого:
public partial class App
{
public static int Tier { get { return RenderCapability.Tier >> 16; } }
static App()
{
Console.Out.WriteLine("Render Tier: {0}", Tier);
}
}
ваш уровень рендеринга должен возвращать 2, если он использовал полный аппаратный ускоренный чертеж. 0 = программное обеспечение, 1 = что-то посередине, если угадать
мне потребовалось около трех часов, чтобы, наконец, понять это-после большой детективной работы, но теперь это пиксель идеально!
похоже, что WPF в Windows XP и WPF в Windows 7 не только имеют разные шрифты по умолчанию лица а также шрифт по умолчанию размеры.
- у меня была проблема, когда шрифты отображались по-разному в Windows XP от того, как они были в Windows 7. Это было очень важно, так как окончательный вывод был на принтер, и они должны быть одинаковыми. Первоначально казалось, что проблема заключается в разнице в межстрочном интервале.
- Да-у меня был такой же точный шрифт, установленный в Windows XP, как и в Windows 7
- Да - я попробовал очень общий шрифт (Arial) и все еще имел те же проблемы.
- Yes-одинаковый 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>
Примечание: если вы используете Blend вам может потребоваться ввести FontSize="12"
вручную. Если вы выберете его из конструктора свойств, он удалит его, потому что он думает, что 12 уже дефолт!
как я уже сказал, моим пунктом назначения был принтер, поэтому мне пришлось сделать то же самое для печатаемого элемента управления.
где еще я могу установить этот размер шрифта по умолчанию? Во всяком случае, теперь у меня есть идеальный рендеринг пикселей в Windows XP и Windows 7, и они отличаются только различиями сглаживания cleartype.
Примечание: UseLayoutRounding
не является частью моего решения , но я всегда использую его в своем корневом элементе управления.
шрифты по умолчанию
сделайте кнопку WPF
<Button x:Name="button" Width="100" Height="25" Content="Button" Click="Button_Click"/>
и код:
private void Button_Click(object sender, RoutedEventArgs e)
{
string msg = string.Format("Number of fonts: {1}{0}Font Family: {2}{0}Font Size: {3}",
Environment.NewLine,
button.FontFamily.FamilyNames.Values.Count.ToString(),
button.FontFamily.FamilyNames.Values.First().ToString(),
button.FontSize.ToString());
MessageBox.Show(msg);
}
запустите это в каждой операционной системе, и вы увидите, что шрифты по умолчанию для XP и Windows7 отличаются.
шрифт по умолчанию для XP - "Тахома" размер 11
шрифт по умолчанию для Windows 7 - "Segoe UI" размер 12
разные версии Windows имеют разные шрифты по умолчанию (также разные версии одних и тех же шрифтов) и разные механизмы рендеринга шрифтов - в результате размер текста отличается между системами.
вы можете попытаться установить шрифт на тот же шрифт и посмотреть, как он работает, возможно, попробуйте несколько шрифтов, чтобы проверить, где разница наименьшая.