Compiled Xamarin Forms XAML - Specified cast is not valid
After releasing a new version of Golden Ratio Calculator, I decided to compile my XAML code to increase performance. I followed this guide from Xamarin and triggered compilation of all XAML in the assembly by adding the following to my App
class.
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace GoldenRatioCalculator {
public class App : Application {
public const string ValueColorString = "#929292";
public static readonly Color ValueColor = new Color(146D, 146D, 146D);
...
The main part of the app worked as it should, but the settings page blew up:

The stack trace was of little assistance.
The settings page consists of just a simple TableView
with a couple of cells. By commenting out parts of page until the error stopped occurring, I found the culprit:
<Label Text="{Binding Decimals}" TextColor="{x:Static l:App.ValueColorString}" />
ValueColorString
is constant in the App
class shown above.
Without XAML compilation this binding works fine. The string is converted to a Color and all is well in the land. With compilation turned on however, the binding fails.
I tried changing from the color string to the actual instance of the Color
, ValueColor
shown above, but the value of the color value became pure white in the view. Not a pretty gray as intended.
Thus, the solution became specifying the color directly in XAML:
<Label Text="{Binding Decimals}" TextColor="#929292" />
The settings page now works, even with compiled XAML.
