尝试打开任何对话框时抛出异常如果 "Material.Init()" 中提供的 "MaterialConfiguration" 使用 XF-Material-Library

Throws exception when trying to open any dialog If the "MaterialConfiguration" provided in "Material.Init()" using XF-Material-Library

我在我的 Xamarin.forms 中使用 XF-Material-Library,所以当我试图通过提供 MaterialConfiguration 类型的对象来更改库的默认主题时XF.Material.Forms.Material.Init() 方法,它在尝试打开任何对话框时不断抛出异常,甚至是库自动打开的 MaterialTextField(带有 InputType="Choice" 和选项列表)的对话框。

这里是异常消息:

Xamarin.Forms.Xaml.XamlParseException: Position 22:32. StaticResource not found for key Material.Dialog.Width

这里是完整的例外:

{Xamarin.Forms.Xaml.XamlParseException: Position 22:32. StaticResource not found for key Material.Dialog.Width  at Xamarin.Forms.Xaml.StaticResourceExtension.ProvideValue (System.IServiceProvider serviceProvider) [0x0008f] in D:\a\s\Xamarin.Forms.Xaml\MarkupExtensions\StaticResourceExtension.cs:27   at XF.Material.Forms.UI.Dialogs.MaterialSimpleDialog.InitializeComponent () [0x00055] in C:\Users\mhvdi\Documents\OpenSource\XF-Material-Library\XF.Material\obj\Release\monoandroid10.0\UI\Dialogs\MaterialSimpleDialog.xaml.g.cs:38   at XF.Material.Forms.UI.Dialogs.MaterialSimpleDialog..ctor (XF.Material.Forms.UI.Dialogs.Configurations.MaterialSimpleDialogConfiguration configuration) [0x00006] in C:\Users\mhvdi\Documents\OpenSource\XF-Material-Library\XF.Material\UI\Dialogs\MaterialSimpleDialog.xaml.cs:21   at XF.Material.Forms.UI.Dialogs.MaterialSimpleDialog.ShowAsync (System.String title, System.Collections.Generic.IEnumerable`1[T] actions, XF.Material.Forms.UI.Dialogs.Configurations.MaterialSimpleDialogConfiguration configuration) [0x00014] in C:\Users\mhvdi\Documents\OpenSource\XF-Material-Library\XF.Material\UI\Dialogs\MaterialSimpleDialog.xaml.cs:31  at UiTest.ViewModels.AboutViewModel.<.ctor>b__17_2 () [0x0006c] in C:\Projects\UiTest\UiTest\UiTest\ViewModels\AboutViewModel.cs:83 }

这是我在 App.xaml.cs 中的代码:

XF.Material.Forms.Material.Init(this, new MaterialConfiguration
            {
                ColorConfiguration = new MaterialColorConfiguration
                {
                    Background = Color.FromHex("#EAEAEA"),
                    Error = Color.FromHex("#B00020"),
                    OnBackground = Color.FromHex("#000000"),
                    OnError = Color.FromHex("#FFFFFF"),
                    OnPrimary = Color.FromHex("#FFFFFF"),
                    OnSecondary = Color.FromHex("#FFFFFF"),
                    OnSurface = Color.FromHex("#000000"),
                    Primary = Color.FromHex("#2196f3"),
                    PrimaryVariant = Color.FromHex("#03A9F4"),
                    Secondary = Color.FromHex("#29b6f6"),
                    SecondaryVariant = Color.FromHex("#0086c3"),
                    Surface = Color.FromHex("#FFFFFF")
                }
            });

注意:目前,我只使用 Android。

我也尝试过使用 App.xaml 添加我的配置,如文档所述,但它对我不起作用,所以我尝试在 cs 文件中添加我的配置。

copied from XF-Material_library issues on GitHub that solved by dm-CaT

我遇到过同样的问题。当您从代码配置 Material 时,无法避免它。您必须通过资源字典配置它。步骤是:

  1. 在app.xaml
  2. 中添加资源
 <Application.Resources>


    <mat:MaterialColorConfiguration x:Key="Material.Color"
        Background="#e1e1e1"
        Error="#B00020"
        OnBackground="#2f3232"
        OnError="#ffffff"
        OnPrimary="#ffffff"
        OnSecondary="#2f3232"
        OnSurface="#2f3232"
        Primary="#585b5b"
        PrimaryVariant="#2f3232"
        Secondary="#ef7d39"
        SecondaryVariant="#ffae67"
        Surface="#f5f5f5" />

    <mat:MaterialConfiguration x:Key="Material.Configuration" ColorConfiguration="{StaticResource Material.Color}"/>

</Application.Resources>
  1. 在 app.xaml.cs 调用 InitializeComponent() 之前初始化 Material。
  2. 在调用 InitializeComponent() 后将资源中的主题应用到 Material。
 Material.Init(this);
 InitializeComponent();
 Material.Use("Material.Configuration");