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