maui-linux/Xamarin.Forms.Xaml.Design
Daniel Cazzulino dc62dc1adf Implement OnPlatform/OnIdiom markup extensions (#2615)
* Added OnPlatform markup extension supporting iOS/Android/UWP for #2608

* Add Default and Other properties to OnPlatformExtension

This allows setting a default value for unknown platforms, as well
as specify values for arbitrary platforms by using a named parameter
like syntax:

`{OnPlatform Android=15, iOS=10, UWP=12, Default=11, Other=Tizen:20}`

The `Other` supports multiple semi-colon separated values. By using
this format, we can make the string more concise than if we used `=`
which would have to be escaped in quotes. For example:

`{OnPlatform Default=10, Other=Tizen:22;Xbox:20;Switch=25;PlayStation=22}`

Added unit tests that verify all the supported combinations.

* Add OnIdiomExtension

The extension allows the following syntax:

`{OnIdiom Phone=23, Tablet=25, Desktop=26, TV=30, Watch=10, Default=20}`

At least one value or `Default` must be specified. `Default` is returned
whenever the specific idiom was not specified.

* Add missing known platforms and return Default if missing

Add all strings that are provided in `Device`.
Convert individual asserts into test cases for better reporting.
Also, whenever a matching platform value isn't specified, return Default
instead of null.

* Turn OnIdiom asserts into test cases

This makes for easier to read, document and report tests.

* Add missing platforms to null check

* Make Default the content property

* Perform type conversion as expected by XamlC

Leverage the conversion that is used elsewhere, to return a
properly typed object that can be assigned directly to the
property. Update tests with typed values since now we get
integers, rather than strings out of the parser.

* Add Converter/ConverterParameter support

* Message should state that the value must be non-null

* Remove Unsupported idiom since it's not useful to set

You can use Default instead.

* Use new GetService<T> extension method for conciseness

* Don't fail if service provider is null

* Remove Other from OnPlatformExtension

As suggested, this might come back in the future in some other form.
2018-05-14 15:56:20 +02:00
..
Properties Initial import 2016-03-22 16:13:41 -07:00
AttributeTableBuilder.cs Implement OnPlatform/OnIdiom markup extensions (#2615) 2018-05-14 15:56:20 +02:00
RegisterMetadata.cs Initial import 2016-03-22 16:13:41 -07:00
Xamarin.Forms.Xaml.Design.csproj Update design dependency (#2503) 2018-04-20 15:21:20 +01:00
packages.config Update design dependency (#2503) 2018-04-20 15:21:20 +01:00