Skip to content

XamlParseException because of custom MaterialConfiguration #457

@ganyuss

Description

@ganyuss

🐛 Bug Report

Whenever I set a custom MaterialConfiguration, sizes are broken. The MaterialLabel font sizes are all default sizes, and when I open an alert, I get this exception:

Xamarin.Forms.Xaml.XamlParseException: Position 19:32. StaticResource not found for key Material.Dialog.Width
  at Xamarin.Forms.Xaml.StaticResourceExtension.ProvideValue (System.IServiceProvider serviceProvider) [0x0008f] in D:\a\1\s\Xamarin.Forms.Xaml\MarkupExtensions\StaticResourceExtension.cs:27 
  at XF.Material.Forms.UI.Dialogs.MaterialAlertDialog.InitializeComponent () [0x00066] in Z:\Documents\OpenSource\XF-Material-Library\XF.Material\obj\Release\monoandroid10.0\UI\Dialogs\MaterialAlertDialog.xaml.g.cs:42 
  at XF.Material.Forms.UI.Dialogs.MaterialAlertDialog..ctor (XF.Material.Forms.UI.Dialogs.Configurations.MaterialAlertDialogConfiguration configuration) [0x00006] in Z:\Documents\OpenSource\XF-Material-Library\XF.Material\UI\Dialogs\MaterialAlertDialog.xaml.cs:32 
  at XF.Material.Forms.UI.Dialogs.MaterialAlertDialog..ctor (System.String message, System.String title, System.String action1Text, System.String action2Text, XF.Material.Forms.UI.Dialogs.Configurations.MaterialAlertDialogConfiguration configuration) [0x00000] in Z:\Documents\OpenSource\XF-Material-Library\XF.Material\UI\Dialogs\MaterialAlertDialog.xaml.cs:12 
  ...

This is due to the "addDefaults" parameter to the Material class' constructor. It stops the flow from setting up size resources whenever a custom config is provided.

if (addDefaults)
{
if (config == null)
{
if (!_res.MergedDictionaries.Contains((defaultColors.Value)))
_res.MergedDictionaries.Add(defaultColors.Value);
if (!_res.MergedDictionaries.Contains((defaultTypos.Value)))
_res.MergedDictionaries.Add(defaultTypos.Value);
}
if (!_res.MergedDictionaries.Contains((defaultSizes.Value)))
_res.MergedDictionaries.Add(defaultSizes.Value);
}

Expected behavior

XF.Material.Forms.Material.Init should setup sizes correctly when custom configs are set.

Reproduction steps

Add this to app resources:

        <resources:MaterialColorConfiguration x:Key="Material.Color"
                                              Background="#EAEAEA"
                                              Error="#B00020"
                                              OnBackground="#000000"
                                              OnError="#FFFFFF"
                                              OnPrimary="#ffffff"
                                              OnSecondary="#FFFFFF"
                                              OnSurface="#000000"
                                              Primary="{StaticResource PrimaryColor}"
                                              PrimaryVariant="#ffdbcd"
                                              Secondary="#4e6704"
                                              SecondaryVariant="#cfee82"
                                              Surface="#FFFFFF" />
        
        <resources:MaterialConfiguration x:Key="Material.Configuration"
                                    ColorConfiguration="{StaticResource Material.Color}" />                                    

And init the package like this:

XF.Material.Forms.Material.Init(this, (MaterialConfiguration)Resources["Material.Configuration"]);

Configuration

Version: 1.8.0

Platform:

  • 📱 iOS
  • 🤖 Android
  • 🏁 WPF
  • 🌎 UWP
  • 🍎 MacOS
  • 📺 tvOS
  • 🐒 Xamarin.Forms

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions