自动将 UWP 应用从高清缩放/缩放到 4K



有没有办法在 4K 屏幕中复制应用程序的高清布局(使它们看起来完全相同),而无需手动计算 4K 屏幕的所有字体大小、边距、填充等,也不必在 VisualState 触发器中设置它们?

以下是我当前解决方案的示例:

<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="ScreenWidthHDState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="{StaticResource ScreenWidthHD}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SampleTextBlock.FontSize" Value="{StaticResource RegularFontSize}" />
<Setter Target="SampleGrid.Margin" Value="6" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
<VisualStateGroup>
<VisualState x:Name="ScreenWidth4KState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="{StaticResource ScreenWidth4K}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="SampleTextBlock.FontSize" Value="{StaticResource RegularFontSize4K}" />
<!-- I'm multiplying the original value (6) by 1.33333 to achieve the exact same layout in 4K that I have in HD -->
<!-- 4K resolution in effective pixels is 2560 wide (2560/1920 = 1.3333333...) -->
<Setter Target="SampleGrid.Margin" Value="8" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

这行得通,但问题是我们在这里拥有的并不是真正的响应式/自适应设计实现,只是以 4K 显示的高清布局的缩放/缩放副本,因此您不会注意到两者之间的差异。通过将"显示设置"中Windows的自定义缩放比例更改为200%,分辨率为3840x2160可以实现相同的效果,但这需要相应地配置每台客户端计算机,这不是一个选项。

可以想象,手动计算应用程序中每个元素的尺寸,使其在高清和 4K 中看起来完全相同,这是一种乏味、耗时且不可扩展的解决方案。我尝试以几种不同的方式使用 ViewBox,但结果远非理想,因为我无法控制以不同方式调整应用程序窗口大小后布局的实际外观。简单地使用具有 ScaleX/ScaleY 值的复合变换会使应用程序超出界限并强制滚动条,这也是不可接受的。

有什么解决方案可以检测屏幕分辨率并神奇地缩放/缩放应用程序,使其在高清和 4K 中看起来完全相同?

只有在Xbox One 上运行UWP 应用时,才能关闭缩放

bool result = 
Windows.UI.ViewManagement.ApplicationViewScaling.TrySetDisableLayoutScaling(true);

但我认为没有任何类似的语法可以在桌面上强制缩放。

缩放内置于操作系统本身,应用程序自动考虑用户为系统设置的缩放比例这一事实通常是一个优势而不是缺点。

换句话说 - 如果应用程序在 4K 显示器上具有设置为 100% 的小字体等,那么问题不仅在于您的应用程序,还在于该设备上的所有应用程序,在这种情况下,用户要么有意识地选择这种显示设置,要么她应该考虑在系统范围内更改它们, 而不是针对特定应用。

最新更新