WPF представляет по-другому на Windows XP по сравнению с Windows 7

Я имел успех с JMockit.

Это является довольно новым, и таким образом, это - немного сырых данных и под - зарегистрированный. Это использует ASM для динамичного переопределения байт-кода класса, таким образом, это может дразнить все методы включая статический, частное, конструкторов и статические инициализаторы. Например:

import mockit.Mockit;

...
Mockit.redefineMethods(MyClassWithStaticInit.class,
                       MyReplacementClass.class);
...
class MyReplacementClass {
  public void $init() {...} // replace default constructor
  public static void $clinit{...} // replace static initializer
  public static void myStatic{...} // replace static method
  // etc...
}

Это имеет интерфейс Expectations, позволяющий сценарии записи/воспроизведения также:

import mockit.Expectations;
import org.testng.annotations.Test;

public class ExpecationsTest {
  private MyClass obj;

  @Test
  public void testFoo() {
    new Expectations(true) {
      MyClass c;
      {
        obj = c;
        invokeReturning(c.getFoo("foo", false), "bas");
      }
    };

    assert "bas".equals(obj.getFoo("foo", false));

    Expectations.assertSatisfied();
  }

  public static class MyClass {
    public String getFoo(String str, boolean bool) {
      if (bool) {
        return "foo";
      } else {
        return "bar";
      }
    }
  }
}

оборотная сторона - то, что это требует Java 5/6.

12
задан Peter Mortensen 23 August 2011 в 21:50
поделиться

3 ответа

Мой опыт:

Я не уверен, что это проблема, я заметил, что 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
ответ дан 2 December 2019 в 18:19
поделиться

Different versions of Windows have different default fonts (also different versions of the same fonts) and different font rendering engines - as a result the text size is different between systems.

You can try to set the font to the same font and see how it works, maybe try several fonts to check where the difference is smallest.

2
ответ дан 2 December 2019 в 18:19
поделиться

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

Создайте кнопку 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 «Tahoma»

Шрифт по умолчанию для Windows 7 - размер 12 «Segoe UI»

6
ответ дан 2 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: