gpt4 book ai didi

xaml - 如何在 uwp 应用程序上正确启用 dpi 缩放

转载 作者:行者123 更新时间:2023-12-01 19:33:03 28 4
gpt4 key购买 nike

我创建了我的第一个 UWP 应用。这是一个 Windows 8.1 UWP 应用程序,它将帮助我的大学安排类(class),而我的大学当前的系统很糟糕。我一直在使用我的 Windows 10 台式电脑(配有 1080p 显示器,默认系统缩放 (100%))进行此操作。我部署了一个测试版本并将其安装在我的笔记本电脑上。该笔记本电脑也是 Windows 10 和 1080p,但屏幕较小,因此我将系统缩放设置为 125%。我的问题是,更高的缩放系数并没有让我的应用程序具有更大的功能,而是相反,缩小了应用程序中的所有内容。

这是我的笔记本电脑在不同缩放系数下运行时的两张屏幕截图。第一个是 100%,此时系统上的所有内容都太小。

App running at 100% scaling.

请注意,按照设计,左侧导航栏的宽度恰好为 44 像素。现在,在下一个屏幕截图中,笔记本电脑以 125% 的系统缩放比例运行(我在拍摄屏幕截图之前注销并登录,因此缩放比例应该已完全更新)。我们应该期望导航栏的宽度为 55 像素。

App running at 125% scaling.

在这里您可以看到应用程序中的区域实际上比以前更小了。此处的导航栏宽度约为 37 像素,而我预期为 55 像素。我在如何扩展 UWP 应用方面是否遗漏了一些内容?

我目前没有完整的 xaml 代码,因为我在笔记本电脑上,但我知道导航栏是网格的一部分,如下所示。该网格是运行应用程序的整体网格,导航栏是第一列。

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

...

</Grid>

我认为这可能是应用程序 list 中的启用缩放选项或其他内容,但我找不到类似的东西。我预计我使用的图像会出现这样的问题,因为我尚未包含更高分辨率的选项,但我没想到 xaml 中定义的布局元素会发生这种情况。

任何人都可以对可能发生的事情发表一些见解吗?这是我的第一个完整应用程序,我有点迷失。

最佳答案

Windows 8.1 没有 125% 缩放的概念;它使用 100%/140%/180%。 DisplayInformation.ResolutionScale 的值将为 100。因此它实际上缩放了 80% (100/125)。 44 * 0.8 约为 35。

注意:以下内容不受支持,因为它依赖于反射并在 Windows 8.1 应用程序中使用 Windows 10 的功能。使用风险由您自行承担。

您可以尝试通过以下一种方法为 Windows 10 上的用户提供更好的 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
};
}
}

关于xaml - 如何在 uwp 应用程序上正确启用 dpi 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227520/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com