Bug 54334

Summary: Styles will override properties on UI-Elements when changing resource dictionaries
Product: Forms Reporter: Björn Bentmar <bjorn.bentmar>
Component: FormsAssignee: Stephane Delcroix <stephane.delcroix>
Status: RESOLVED FIXED    
Severity: normal CC: david, jas, mail, paul.dipietro, rui.marinho, tsauder91
Priority: ---    
Version: 2.3.4   
Target Milestone: ---   
Hardware: PC   
OS: Windows   
Tags: Is this bug a regression?: Yes
Last known good build: 2.3.4 pre 2 ac
Attachments: repro-project

Description Björn Bentmar 2017-03-31 13:14:49 UTC
Created attachment 21104 [details]
repro-project

#SYSTEM
Microsoft Visual Studio Enterprise 2015
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01586

Mono Debugging for Visual Studio   Mono.Debugging.VisualStudio
Support for debugging Mono processes with Visual Studio.

Xamarin   4.3.0.795 (aece090)
Visual Studio extension to enable development for Xamarin.iOS and Xamarin.Android.

Xamarin.Android   7.1.0.43 (3a62f1e)
Visual Studio extension to enable development for Xamarin.Android.

Xamarin.iOS   10.6.0.9 (a05f40e)
Visual Studio extension to enable development for Xamarin.iOS.

#EXPECTED RESULT
CHanging resourcedictinary for App.Current.Resources styles should not override properties set on UI-elements (a labels textcolor i.e). If the Labels textcolor is set to Black in code, styles for a label with setters for TextColor should not override it.

#ACTUAL RESULT
The style-properties will override the properties set in code for the specific UI-element

#THOUGHTS
-If you set your apps resourcedictionary after the initialisation of mainpage it works as it should, but will stop 
 working when you push a new page (this goes for every page instantiated after resources has been set)

-This is a regression, this bug came in 2.3.4 pre 3, it was working fine in pre 2

-I have only tested on android

-I think this PR is the cause to this bug (ontroduced in pre 3) https://github.com/xamarin/Xamarin.Forms/pull/737

-If its unclear what i mean just try the repro-project, it will make sense

Thank you!
Comment 1 Paul DiPietro [MSFT] 2017-03-31 17:21:47 UTC
It looks like the behavior is showing in pre6 as well.
Comment 2 Stephane Delcroix 2017-04-03 09:22:15 UTC
Please note that declaring ResourceDictionaries as Application content is wrong. Application expect a Page as Content. Everything else is ignored, even if the objects are created. This works right now because the assignment test is done after the object creation, BUT THAT IS NOT GUARANTEED TO WORK IN THE FUTURE.

What you want is probably creating ResourcesDictionaries as separate Xaml roots (in separate files) and use those.
Comment 3 Björn Bentmar 2017-04-03 09:25:54 UTC
The current solution i have today is actually what you describe. I just made the repo very simple. but the result is the same in both scenarios.
Comment 4 Rui Marinho 2017-04-06 21:19:41 UTC
Should be fixed on 2.3.4-sr1 or 2.3.5-pre1
Comment 5 tsauder91 2017-04-11 15:12:04 UTC
I just updated my project to the stable release of 2.3.4 and this still seems to be an issue.
Comment 6 Björn Bentmar 2017-04-11 15:13:22 UTC
Thats because the fix is not included in 2.3.4...
Comment 7 tsauder91 2017-04-11 15:58:17 UTC
Oops miss read the comment above my last sorry.