首页 > 解决方案 > Uno-platform:画布不是像素,而是按比例缩放

问题描述

Uno 说它是“无处不在的完美像素”。所以我创建了一个宽度为 320 和高度为 320 的画布,并在其中放置了一些按钮,每个边缘一个。

现在,当我在 Android 或 IOS 上启动应用程序时,画布比屏幕大,右侧的按钮根本不显示。

但是我的 iPhone8 和三星 S9 的屏幕分辨率远远大于 320 x 320。整个画布被某种东西缩放,甚至主窗口的窗口边界也远小于我的屏幕分辨率。

我的问题:

  1. 我可以关闭缩放并使用真实分辨率吗?
  2. 是否有一个属性可以让我获得缩放因子,这样我就可以调整画布的大小并将所有内容计算为缩放后的大小?

标签: uno-platform

解决方案


WidthUno/WinUI Xaml 中的和等布局值Height“逻辑像素”中定义,与“物理像素”不同。由于具有相似物理尺寸的设备可能具有截然不同的物理像素密度,因此在大多数情况下,逻辑像素是指定布局尺寸的更好方法。

确保您了解 Xaml 的布局系统- 当您将内容拉伸到屏幕宽度时,通常根本不应该对尺寸进行硬编码。例如:

    <Grid HorizontalAlignment="Stretch"
          Height="320">
        <Button Content="Button1"
                HorizontalAlignment="Left"
                VerticalAlignment="Top" />
        <Button Content="Button2"
                HorizontalAlignment="Right"
                VerticalAlignment="Top" />
        ...
    </Grid>

综上所述,在极少数情况下您确实需要使用与设备相关的物理像素,您可以使用DisplayInformation该类及其属性,例如:

            var displayInformation = DisplayInformation.GetForCurrentView();
            var scaleFactor = displayInformation.RawPixelsPerViewPixel;
            ...

推荐阅读