2016-07-06 8 views
4

첫 번째 UWP 앱을 만들었습니다. 현재 시스템이 끔찍한 내 대학에서 일정을 예약하는 데 도움이되는 Windows 8.1 UWP 앱입니다. 저는 기본 시스템 확장 (100 %)에서 1080p 모니터가 장착 된 Windows 10 데스크탑 컴퓨터에서이 작업을 수행했습니다. 테스트 빌드를 배치하고 랩톱에 설치했습니다. 랩톱도 Windows 10 및 1080p이지만 화면이 작아서 시스템 확장을 125 %로 설정했습니다. 내 문제는 내 애플 리케이션 더 큰 기능을 만드는이 높은 스케일링 요소 대신, 그 반대로하고 응용 프로그램에서 모든 것을 축소합니다.uwp 앱에서 dpi-scaling을 올바르게 사용하는 방법

여기 내 노트북에서 두 개의 스크린 샷을 다른 스케일링 요소로 실행할 때 있습니다. 첫 번째는 시스템의 모든 것이 너무 작은 100 %입니다. 왼쪽 탐색 바 설계대로 정확히 44 픽셀 폭이라고

App running at 100% scaling.

참고. 이제 다음 스크린 샷에서 노트북은 125 % 시스템 배율로 실행 중입니다 (로그 아웃 한 후 스크린 샷을 찍기 전에 배율이 완전히 업데이트되어야 함). 탐색 막대의 너비는 55 픽셀이어야합니다.

App running at 125% scaling.

여기 당신은 그들이 이전에 비해 응용 프로그램의 영역은 실제로 작은 가지고 있음을 볼 수 있습니다. 여기서 탐색 바는 내가 예상 한 55 픽셀에 비해 약 37 픽셀입니다. UWP 앱을 어떻게 확장해야하는지에 대해 내가 놓친 것이 있습니까?

내 랩톱 컴퓨터를 사용하고 있기 때문에 현재 전체 xaml 코드가 나와 있지 않지만 탐색 막대는 이렇게 보이는 그리드의 일부입니다. 이 그리드는 첫 번째 열인 탐색 표시 줄과 함께 앱을 실행하는 전체 눈금입니다.

<Grid x:name="gridOverall"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="44"/> 
     <ColumnDefinition Width="200"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 

    ... 

</Grid> 

가 나는 매니페스트 응용 프로그램 또는 무언가에 가능 스케일링 옵션되었을 수 있습니다 생각하지만 난 그것과 같은 아무것도 찾을 수 없습니다. 나는 아직 내가 고해상도 옵션을 아직 포함하지 않았기 때문에 내가 사용했던 이미지에서 이와 같은 문제가 발생할 것으로 예상했지만, xaml에 정의 된 레이아웃 요소에서 이러한 문제가 발생할 것으로 기대하지는 않았다.

어떤 일이 벌어 질지에 대해 통찰력을 줄 수 있습니까? 이것은 내 첫 번째 전체 애플 리케이션이며 조금 잃어버린.

+0

Win10의 UWP 배율은 생각대로 작동하지 않습니다. DPI 설정이 아닌 실제 화면 크기에주의를 기울입니다. [자세한 내용은] (https://blogs.technet.microsoft.com/supportingwindows/2015/12/08/display-scaling-in-windows-10/). –

+0

아니, 이해할 것 같아. 내 랩톱 모니터는 기능이 올바른 크기가되도록 125 % 시스템 확장이 필요합니다. 이렇게하면 예를 들어 작업 표시 줄은 내 바탕 화면과 동일한 실제 크기입니다. 100 %라면 모든 것이 더 작아집니다. 내 앱은 100에서 다른 것과 똑같이 작동하지만 125에서는 다른 모든 것처럼 커지지 ​​않습니다.나는 그 설정에서 25 %까지 확대되어야하는 유효 픽셀을 사용하여 모든 것을 생성했다고 가정합니다. – Graham

답변

1

Windows 8.1에는 125 % 확장이라는 개념이 없습니다. 100 %/140 %/180 %를 사용합니다. DisplayInformation.ResolutionScale의 값은 100이 될 것이므로 실제 크기는 80 % (100/125)입니다. 그리고 44 * 0.8는 ~ 35입니다.

참고 : Windows 8.1 앱에서 Windows 10의 기능을 사용하고 리플렉션에 의존하기 때문에 다음은 지원되지 않습니다. 자신의 책임하에 사용하십시오.

Windows 8.1 사용자가 Windows 8.1 앱을 더 잘 사용할 수있는 방법 중 하나입니다. 필자는 Windows 10에서 간단히 테스트했지만 Windows 8.1에서도보다 철저한 테스트를 수행하려고합니다.

private void FixUpScale() 
{ 
    // Need to add a using for System.Reflection; 

    var displayInfo = DisplayInformation.GetForCurrentView(); 
    var displayType = displayInfo.GetType(); 
    var rawPixelsProperty = displayType.GetRuntimeProperty("RawPixelsPerViewPixel"); 

    if (rawPixelsProperty != null) 
    { 
    var realScale = (double)rawPixelsProperty.GetValue(displayInfo); 

    // To get to actual Windows 10 scale, we need to convert from 
    // the de-scaled Win8.1 (100/125) back to 100, then up again to 
    // the desired scale factor (125). So we get the ratio between the 
    // Win8.1 pixels and real pixels, and then square it. 
    var fixupFactor = Math.Pow((double)displayInfo.ResolutionScale/
     realScale/100, 2); 

    Window.Current.Content.RenderTransform = new ScaleTransform 
    { 
     ScaleX = fixupFactor, 
     ScaleY = fixupFactor 
    }; 
    } 
} 
+0

오케이. 어떻게하면이 문제를 해결할 수 있을지 생각해? UWP로 전환해야하는 것을 원하지 않습니다. 유닉스에서 여전히 8이나 8.1을 사용하는 사람들이 제외 될 것입니다. – Graham

+0

추가 정보; 비록 지원되지 않습니다. 실제로 두 개의 응용 프로그램 (8.1 응용 프로그램과 10 응용 프로그램)을 만들어야합니다. –

관련 문제