设备类在 .net MAUI 中被标记为已过时

Fre*_*Ali 5 c# maui .net-6.0 .net-maui

最近我更新到了最新版本的 .net MAUI,我有点惊讶地发现 MAUI 设备类现在已被标记为“过时”

我有多个用例,其中我将设备类用于某些用途。

例如,现在主线程方法已过时:

Device.BeginInvokeOnMainThread(() =>{});
Run Code Online (Sandbox Code Playgroud)

现在是否有一个新的助手类将执行这些活动,或者我错过了什么?

在此输入图像描述

G C*_*ovs 7

所以我们有Xamarin.essentials替代方案

MainThread.BeginInvokeOnMainThread(() =>{});

Run Code Online (Sandbox Code Playgroud)

Xamarin.essentials 已移植到.Net Maui,所以同样的东西

MainThread.BeginInvokeOnMainThread(() =>{});

Run Code Online (Sandbox Code Playgroud)

关于 FontSize 甚至 Maui FontSizeConverter使用 Device

Device.GetNamedSize(NamedSize.Micro, typeof(Label)));
Run Code Online (Sandbox Code Playgroud)

所以像他们一样使用 pragma ;)

更新将在此github上讨论Core中NamedSize字体的实现


Fre*_*Ali 2

更新:

Maui 现在有一个命名空间,其中包含一堆与设备相关的类,您可以在 Microsoft.Maui.Devices 下找到它们

在此输入图像描述

奥格回答:

正如杰森在评论中指出的那样,显然他们已经决定解散整个设备类,现在所有的功能要么被移出,要么被其他选项替换,没有一个在同一棵树下,尽管更多信息在这里

设备

这是包含类,它拥有的所有内容现在都已过时。准备在 .NET 7 中删除!GetNamedSize、NamedSize 和 IFontNamedSizeService 这曾经是获取缩放字体大小的唯一方法,但现在它内置于 Font 中。如果我们想实际向用户公开这些值,我们可以使用“字符串类型枚举”来支持系统上的其他值。我们只有 Title1,但还有 Title2 和 Title3。Device.Styles 和 ISystemResourcesProvider(“设备样式”,例如:{DynamicResource TitleStyle}) 这是获取操作系统字体样式的方法。这可能比我想象的更受欢迎,但我现在只是先行删除它。在这两种情况下(命名尺寸和设备样式),我可能会错过这里的真正用途,因此此 PR 是为了展示正在发生的事情并可以开始对话。

如果有的话,有些东西需要调整,并且不仅仅存在于 Device 类中。

命名大小注意:这些值看起来很神奇并且可以做一些事情,但是在 XAML 解析时,它们被转换为双精度值,而不知道它们是特殊值。因此,他们从未对操作系统的更改做出响应。一旦设置,它们只是一个数字,没有什么特别的

对于命名大小,我们可以让 Font 更智能,并且实际上将字符串类型的值作为字段。例如:

class Font {
    double Size;
    string NamedSize;
    string Family;
}
Run Code Online (Sandbox Code Playgroud)

然后字体管理器可以执行如下检查:

double realSize;
if (font.NamedSize != null) {
    realSize = GetSizeFromName(font.NamedSize);
} else {
    realSize = font.Size * scalingFactor;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助别人:)