Uno-platform:Canvas 不是以像素为单位,而是按比例缩放
Uno-platform: Canvas not in pixel but scaled by something
Uno 说是 'Pixel Perfect Everywhere'。
所以我创建了一个宽度为 320 高度为 320 的 canvas 并在里面放置了一些按钮,每边一个。
现在当我启动应用程序时,在 Android 或 IOS 上, canvas 比屏幕大,右侧的按钮根本不显示.
但是我的 iPhone8 和三星 S9 的屏幕分辨率比 320 x 320 大得多。
整个 canvas 被某种东西缩放了,甚至主 window 的 window 边界也远小于我的屏幕分辨率。
我的问题:
- 我可以关闭缩放并使用实际分辨率吗?
- 是否有一个 属性 可以让我获得比例因子,这样我就可以调整 canvas 的大小,然后将所有内容计算为缩放后的大小?
Uno/WinUI Xaml 中的 Width
和 Height
等布局值在 'logical pixels' 中定义,与 'physical pixels' 不同。由于具有相似物理尺寸的设备可能具有截然不同的物理像素密度,因此在大多数情况下逻辑像素是指定布局尺寸的更好方法。
确保您理解 Xaml 的 layouting system - 当您将内容拉伸到屏幕宽度时,通常根本不应该对尺寸进行硬编码。例如:
<Grid HorizontalAlignment="Stretch"
Height="320">
<Button Content="Button1"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
<Button Content="Button2"
HorizontalAlignment="Right"
VerticalAlignment="Top" />
...
</Grid>
综上所述,在极少数情况下,您确实需要使用与设备相关的物理像素,您可以使用 DisplayInformation
class 及其属性,例如:
var displayInformation = DisplayInformation.GetForCurrentView();
var scaleFactor = displayInformation.RawPixelsPerViewPixel;
...
Uno 说是 'Pixel Perfect Everywhere'。 所以我创建了一个宽度为 320 高度为 320 的 canvas 并在里面放置了一些按钮,每边一个。
现在当我启动应用程序时,在 Android 或 IOS 上, canvas 比屏幕大,右侧的按钮根本不显示.
但是我的 iPhone8 和三星 S9 的屏幕分辨率比 320 x 320 大得多。 整个 canvas 被某种东西缩放了,甚至主 window 的 window 边界也远小于我的屏幕分辨率。
我的问题:
- 我可以关闭缩放并使用实际分辨率吗?
- 是否有一个 属性 可以让我获得比例因子,这样我就可以调整 canvas 的大小,然后将所有内容计算为缩放后的大小?
Uno/WinUI Xaml 中的 Width
和 Height
等布局值在 'logical pixels' 中定义,与 'physical pixels' 不同。由于具有相似物理尺寸的设备可能具有截然不同的物理像素密度,因此在大多数情况下逻辑像素是指定布局尺寸的更好方法。
确保您理解 Xaml 的 layouting system - 当您将内容拉伸到屏幕宽度时,通常根本不应该对尺寸进行硬编码。例如:
<Grid HorizontalAlignment="Stretch"
Height="320">
<Button Content="Button1"
HorizontalAlignment="Left"
VerticalAlignment="Top" />
<Button Content="Button2"
HorizontalAlignment="Right"
VerticalAlignment="Top" />
...
</Grid>
综上所述,在极少数情况下,您确实需要使用与设备相关的物理像素,您可以使用 DisplayInformation
class 及其属性,例如:
var displayInformation = DisplayInformation.GetForCurrentView();
var scaleFactor = displayInformation.RawPixelsPerViewPixel;
...