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.

Windows XP

Windows 7

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 имеют разные шрифты по умолчанию (также разные версии одних и тех же шрифтов) и разные механизмы рендеринга шрифтов - в результате размер текста отличается между системами.

вы можете попытаться установить шрифт на тот же шрифт и посмотреть, как он работает, возможно, попробуйте несколько шрифтов, чтобы проверить, где разница наименьшая.