문제

Windows XP 대 Windows 7에서 WPF가 다르게 렌더링되는 이유는 무엇입니까?

두 컴퓨터 모두에서 .NET SP1을 사용하고 있습니다 ..

내 레이아웃은 툴바가없는이 창과 같으며 전체 화면에 맞게 최대화하도록 설정되어 있습니다.

그 아래에는 스트레치를 사용하기위한 뷰 박스 세트가 있습니다. 균일하고 그 아래에는 내 평신도가 있습니다.

이런 식으로 나는 모든 컴퓨터에서 동일한 레이아웃을 얻기를 희망했지만 Windows XP에서 정확히 동일하게 렌더링되지 않는 것 같습니다. 일부 항목은 조금 작고 레이아웃이 그렇게 멋지게 보이지 않습니다.

Windows 7 컴퓨터의 리소 슈를 Windows XP 컴퓨터와 동일하게 변경하려고했으며 레이아웃을 예상처럼 유지합니다.

두 컴퓨터 모두 96 DPI를 사용합니다.

윈도우 XP

윈도우 7

도움이 되었습니까?

해결책

나의 경험:

그것이 문제인지 확실하지 않습니다. 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 = 중간에있는 것도 추측하면

다른 팁

많은 탐정 작업 후에 마침내 이것을 알아 내기 위해 약 3 시간이 걸렸지 만 이제는 픽셀 완벽합니다!

Windows XP의 WPF 및 Windows 7의 WPF는 기본 글꼴이 다를뿐만 아니라 얼굴 기본 글꼴뿐만 아니라 크기.

  • 글꼴이 Windows 7의 방식에서 Windows XP에서 다르게 렌더링되는 문제가있었습니다. 최종 출력이 프린터에 있었기 때문에 매우 중요했고 동일해야했습니다. 처음에는 문제가 라인 간격의 차이 인 것으로 나타났습니다.
  • 예 - Windows 7에서 사용하는 것과 같은 Windows XP에 동일한 정확한 글꼴이 설치되었습니다.
  • 예 - 나는 매우 일반적인 글꼴 (Arial)을 시도했지만 여전히 같은 문제가있었습니다.
  • 예 - 두 기계에서 동일한 DPI.
  • 예 - VM (Windows XP 모드)이든 실제 Windows XP 시스템에도 동일한 결과입니다.

결국 나는 명시 적 크기를 지정하는 글꼴이 Windows XP에서 동일하게 보였고 명시 적 크기를 지정하지 않은 글꼴만이 다르다는 것을 발견했습니다.

그래서 여기에 내가 그것을 고정시키는 방법은 다음과 같습니다 MainWindow.xaml - a ContentControl 기본 크기를 설정하려면 :

<Grid x:Name="LayoutRoot" Background="#FFDEDEDE" UseLayoutRounding="True">
    <ContentControl FontFamily="Segoe UI" FontSize="12">
         ... window contents ...
    </ContentControl>
</Grid>

메모: 사용하는 경우 혼합하다 입력해야 할 수도 있습니다 FontSize="12" 손으로. Properties Designer에서 선택하면 12가 이미 기본값이라고 생각하기 때문에 삭제됩니다!

내가 말했듯이 내 목적지는 프린터라고 말했기 때문에 컨트롤을 인쇄하기 위해 똑같이해야했습니다.

이 기본 글꼴 크기를 어디에서 설정할 수 있습니까? 어쨌든, 나는 이제 Windows XP와 Windows 7에서 Pixel Perfect 렌더링을 가지고 있으며, cleartype aliasing 차이에 의해서만 다릅니다.

메모: 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의 기본 글꼴은 "Tahoma"크기 11입니다.

Windows 7의 기본 글꼴은 "Segoe UI"크기 12입니다.

Windows의 다른 버전마다 기본 글꼴 (동일한 글꼴의 다른 버전)과 다른 글꼴 렌더링 엔진이 있습니다. 결과적으로 텍스트 크기는 시스템마다 다릅니다.

글꼴을 동일한 글꼴로 설정하고 어떻게 작동하는지 확인할 수 있습니다. 차이가 가장 작은 위치를 확인하기 위해 여러 글꼴을 시도해 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top