Подтвердить что ты не робот

WPF отличается от Windows XP и Windows 7

Почему WPF отличается по-разному в Windows XP vs Windows 7?

Я использую .NET SP1 на обоих компьютерах.

Мой макет похож на это окно, у которого нет панели инструментов, и он настроен на максимальное увеличение, чтобы он соответствовал всему экрану.

При этом у меня есть набор Viewbox для использования Stretch: Uniform, и под этим я имею свой LayoutRoot.

Таким образом, я надеялся получить один и тот же макет на всех компьютерах, но, похоже, он не отображается точно так же на Windows XP. Некоторые элементы немного меньше, и макет не выглядит так замечательно.

Я попытался изменить свою резулью на моем компьютере с Windows 7 так же, как на компьютере под управлением Windows XP, и он поддерживает макет, как предполагается.

И оба компьютера используют 96 DPI.

Windows XP

Windows 7

4b9b3361

Ответ 1

Мой опыт:

Я не уверен, что это проблема, я заметил, что 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 = что-то посередине, если угадать

Ответ 2

Взял меня около трех часов, чтобы наконец понять это - после долгих детективных работ, но теперь это идеальный пиксель!

Похоже, что 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>

Примечание. Если вы используете Blend, вам может потребоваться ввести FontSize="12" вручную. Если вы выберете его из конструктора свойств, он удалит его, потому что он считает, что 12 уже по умолчанию!

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

Где еще я могу установить этот размер шрифта по умолчанию? Во всяком случае, теперь у меня есть идеальный рендеринг пикселей на Windows XP и Windows 7, и они отличаются только различиями в сглаживании cleartype.

Примечание: UseLayoutRounding не является частью моего решения, но я всегда использую его и в моем корневом элементе управления.

Ответ 3

Шрифты по умолчанию разные

Сделайте кнопку 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

Ответ 4

В разных версиях Windows есть разные шрифты по умолчанию (также разные версии одних и тех же шрифтов) и разные механизмы рендеринга шрифтов - в результате размер текста различается между системами.

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