尝试打开任何对话框时抛出异常如果 "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 时,无法避免它。您必须通过资源字典配置它。步骤是:
- 在app.xaml
中添加资源
<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>
- 在 app.xaml.cs 调用 InitializeComponent() 之前初始化 Material。
- 在调用 InitializeComponent() 后将资源中的主题应用到 Material。
Material.Init(this);
InitializeComponent();
Material.Use("Material.Configuration");
我在我的 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 时,无法避免它。您必须通过资源字典配置它。步骤是:
- 在app.xaml 中添加资源
<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>
- 在 app.xaml.cs 调用 InitializeComponent() 之前初始化 Material。
- 在调用 InitializeComponent() 后将资源中的主题应用到 Material。
Material.Init(this);
InitializeComponent();
Material.Use("Material.Configuration");