Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 83da90f

Browse files
StephaneDelcroixJason Smith
authored and
Jason Smith
committed
[Xaml] OnPlatform.Default value (#873)
* [Xaml] OnPlatform.Default value * docs
1 parent 0d39bda commit 83da90f

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

Xamarin.Forms.Core/OnPlatform.cs

+13-1
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,21 @@ public T WinPhone {
4343
}
4444
}
4545

46+
bool hasDefault;
47+
T @default;
48+
public T Default {
49+
get { return @default; }
50+
set {
51+
hasDefault = true;
52+
@default = value;
53+
}
54+
}
55+
4656
public IList<On> Platforms { get; private set; }
4757

58+
#pragma warning disable RECS0108 // Warns about static fields in generic types
4859
static readonly IValueConverterProvider s_valueConverter = DependencyService.Get<IValueConverterProvider>();
60+
#pragma warning restore RECS0108 // Warns about static fields in generic types
4961

5062
public static implicit operator T(OnPlatform<T> onPlatform)
5163
{
@@ -60,7 +72,7 @@ public static implicit operator T(OnPlatform<T> onPlatform)
6072
}
6173

6274
if (!onPlatform.useLegacyFallback)
63-
return default(T);
75+
return onPlatform.hasDefault ? onPlatform.@default : default(T);
6476

6577
//legacy fallback
6678
#pragma warning disable 0618, 0612

Xamarin.Forms.Xaml.UnitTests/OnPlatform.xaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
</OnPlatform>
3838
</Label.Text>
3939
<Label.HeightRequest>
40-
<OnPlatform x:TypeArguments="x:Double">
40+
<OnPlatform x:TypeArguments="x:Double" Default="63">
4141
<On Platform="iOS">21</On>
4242
<On Platform="Android, FooBar">42</On>
4343
</OnPlatform>

Xamarin.Forms.Xaml.UnitTests/OnPlatform.xaml.cs

+8
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,15 @@ public void OnPlatform2Syntax(bool useCompiledXaml)
121121
((MockPlatformServices)Device.PlatformServices).RuntimePlatform = "FooBar";
122122
layout = new OnPlatform(useCompiledXaml);
123123
Assert.AreEqual(42, layout.label0.HeightRequest);
124+
}
124125

126+
[TestCase(false)]
127+
[TestCase(true)]
128+
public void OnPlatformDefault(bool useCompiledXaml)
129+
{
130+
((MockPlatformServices)Device.PlatformServices).RuntimePlatform = "\ud83d\ude80";
131+
var layout = new OnPlatform(useCompiledXaml);
132+
Assert.AreEqual(63, layout.label0.HeightRequest);
125133
}
126134
}
127135
}

docs/Xamarin.Forms.Core/Xamarin.Forms/OnPlatform`1.xml

+16
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,22 @@
7575
<remarks>To be added.</remarks>
7676
</Docs>
7777
</Member>
78+
<Member MemberName="Default">
79+
<MemberSignature Language="C#" Value="public T Default { get; set; }" />
80+
<MemberSignature Language="ILAsm" Value=".property instance !T Default" />
81+
<MemberType>Property</MemberType>
82+
<AssemblyInfo>
83+
<AssemblyVersion>2.0.0.0</AssemblyVersion>
84+
</AssemblyInfo>
85+
<ReturnValue>
86+
<ReturnType>T</ReturnType>
87+
</ReturnValue>
88+
<Docs>
89+
<summary>To be added.</summary>
90+
<value>To be added.</value>
91+
<remarks>To be added.</remarks>
92+
</Docs>
93+
</Member>
7894
<Member MemberName="iOS">
7995
<MemberSignature Language="C#" Value="public T iOS { get; set; }" />
8096
<MemberSignature Language="ILAsm" Value=".property instance !T iOS" />

0 commit comments

Comments
 (0)