在 Xamarin.Forms 中使用 XAML 中的资源文件

Using Resource files in XAML in Xamarin.Forms

我正在尝试使用 XAML 中的资源文件。出于某种原因,我一直收到找不到类型 Texts 的错误。不确定我在这里做错了什么。

XAML

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:CashRegisterApp.Resources"
             x:Class="CashRegisterApp.Start">
    <ContentPage.Content>
        <StackLayout
            VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" >
        <Label Text="{x:Static local:Texts.Start}"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

RESX

解决方案资源管理器

已知在共享项目中创建 RESX 文件会导致问题。您可以在 Xamarin 论坛中看到几篇关于此的冗长帖子(例如 here and here)。

允许您使用您想要的方法的最简单的解决方案是在您的解决方案中创建一个新的 PCL 库的 .NET 标准库,在那里创建您的 RESX 文件并将它们的可见性设置为 public。然后,您将能够按预期使用 x:Static 语法来使用它们。

许多开发人员使用自定义标记扩展形式的替代方案,例如 ClaudioPereira 在此 forum 中提出的解决方案。这进一步简化了语法。

最后,有关 Xamarin.Forms 的最详细信息,您可以参考 official documentation

我也有这个问题,我希望这个答案能帮助以后解决这个问题的人。

遵循 this 指南教会了我如何在 Xamarin 表单中设置 resx 文件。 他们的 TranslateExtension 允许直接从 Xaml.

引用 resx 文件

不幸的是,在其原始形式中,它不会获取区域设置的运行时更改。 这可以通过更改 "Localize" class(在本机平台上)来解决,以便在通过 SetLocale 方法更改时保留 CultureInfo 的引用,并在调用 GetCurrentCultureInfo 方法时保留对 CultureInfo 的引用。