[Xaml] OnPlatform.Default value (#873)
authorStephane Delcroix <stephane@delcroix.org>
Tue, 25 Apr 2017 18:06:29 +0000 (20:06 +0200)
committerJason Smith <jason.smith@xamarin.com>
Tue, 25 Apr 2017 18:07:55 +0000 (11:07 -0700)
* [Xaml] OnPlatform.Default value

* docs

Xamarin.Forms.Core/OnPlatform.cs
Xamarin.Forms.Xaml.UnitTests/OnPlatform.xaml
Xamarin.Forms.Xaml.UnitTests/OnPlatform.xaml.cs
docs/Xamarin.Forms.Core/Xamarin.Forms/OnPlatform`1.xml

index 6862113..c179dc5 100644 (file)
@@ -43,9 +43,21 @@ namespace Xamarin.Forms
                        }
                }
 
+               bool hasDefault;
+               T @default;
+               public T Default {
+                       get { return @default; }
+                       set {
+                               hasDefault = true;
+                               @default = value;
+                       }
+               }
+
                public IList<On> Platforms { get; private set; }
 
+#pragma warning disable RECS0108 // Warns about static fields in generic types
                static readonly IValueConverterProvider s_valueConverter = DependencyService.Get<IValueConverterProvider>();
+#pragma warning restore RECS0108 // Warns about static fields in generic types
 
                public static implicit operator T(OnPlatform<T> onPlatform)
                {
@@ -60,7 +72,7 @@ namespace Xamarin.Forms
                        }
 
                        if (!onPlatform.useLegacyFallback)
-                               return default(T);
+                               return onPlatform.hasDefault ? onPlatform.@default : default(T);
 
                        //legacy fallback
 #pragma warning disable 0618, 0612
index de9a1e6..5c3cd3d 100644 (file)
@@ -37,7 +37,7 @@
                                </OnPlatform>
                        </Label.Text>
                        <Label.HeightRequest>
-                               <OnPlatform x:TypeArguments="x:Double">
+                               <OnPlatform x:TypeArguments="x:Double" Default="63">
                                        <On Platform="iOS">21</On>
                                        <On Platform="Android, FooBar">42</On>
                                </OnPlatform>
index edfb695..23ebe92 100644 (file)
@@ -121,7 +121,15 @@ namespace Xamarin.Forms.Xaml.UnitTests
                                ((MockPlatformServices)Device.PlatformServices).RuntimePlatform = "FooBar";
                                layout = new OnPlatform(useCompiledXaml);
                                Assert.AreEqual(42, layout.label0.HeightRequest);
+                       }
 
+                       [TestCase(false)]
+                       [TestCase(true)]
+                       public void OnPlatformDefault(bool useCompiledXaml)
+                       {
+                               ((MockPlatformServices)Device.PlatformServices).RuntimePlatform = "\ud83d\ude80";
+                               var layout = new OnPlatform(useCompiledXaml);
+                               Assert.AreEqual(63, layout.label0.HeightRequest);
                        }
                }
        }
index e703a91..4addd77 100644 (file)
         <remarks>To be added.</remarks>
       </Docs>
     </Member>
+    <Member MemberName="Default">
+      <MemberSignature Language="C#" Value="public T Default { get; set; }" />
+      <MemberSignature Language="ILAsm" Value=".property instance !T Default" />
+      <MemberType>Property</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>2.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>T</ReturnType>
+      </ReturnValue>
+      <Docs>
+        <summary>To be added.</summary>
+        <value>To be added.</value>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
     <Member MemberName="iOS">
       <MemberSignature Language="C#" Value="public T iOS { get; set; }" />
       <MemberSignature Language="ILAsm" Value=".property instance !T iOS" />