Xaml 中的 Xamarin Forms OnPlatform

Xamarin Forms OnPlatform in Xaml

我有以下 C# 代码:

var footer = new StackLayout()
            { BackgroundColor = Device.OnPlatform(Color.FromRgb(225, 240, 251), Color.FromRgb(225, 240, 251), Color.Black),
            };

我如何将其转换为 Xamarin Xaml,更重要的是 FromRgb 的设备平台细节?

到目前为止,我有以下 XAML...再次,是 FromRgb 难倒了我。

<StackLayout.BackgroundColor>
    <Color>
        <OnPlatform x:TypeArguments="Color"></OnPlatform>
    </Color>
</StackLayout.BackgroundColor>

2015 年 2 月 14 日更新

我刚刚尝试了下面的答案,我得到了以下答案,但它没有更新 iOS 或 Windows Phone 的背景颜色。如果我将背景颜色添加到根 StackLayout 元素,它会起作用...:

<StackLayout HorizontalOptions="FillAndExpand">
    <StackLayout.BackgroundColor>
      <Color>
        <OnPlatform x:TypeArguments="Color">
          <OnPlatform.WinPhone>#51C0D4</OnPlatform.WinPhone>
          <OnPlatform.iOS>#51C0D4</OnPlatform.iOS>
        </OnPlatform>
      </Color>
    </StackLayout.BackgroundColor>
    <Label Text=""></Label>
    <StackLayout Orientation="Horizontal"  VerticalOptions="EndAndExpand" HorizontalOptions="FillAndExpand">
      <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand">
      <Button Text="Login"></Button>
      <Button Text="Sign Up"></Button>
      </StackLayout>
    </StackLayout>
  </StackLayout>

你快到了。默认转换器负责从命名颜色(例如白色、红色等)或十六进制颜色(例如:#FF0000)转换颜色。

<StackLayout.BackgroundColor>
    <OnPlatform x:TypeArguments="Color">
        <OnPlatform.iOS>#FF0000</OnPlatform.iOS>
        <OnPlatform.Android>#00FF00</OnPlatform.Android>
    </OnPlatform>
</StackLayout.BackgroundColor>

OnPlatform 的新版本语法略有不同

在Xaml中:

 <ResourceDictionary>
            <OnPlatform x:Key="SwitchOnColor"  x:TypeArguments="Color" >
                <On Platform="iOS|Android" >#0000FF</On>
                <On Platform="UWP">#FF0000</On>
            </OnPlatform>
 </ResourceDictionary> 

在代码中:

 switch (Device.RuntimePlatform)
 {
     case "iOS":
     break;
     case "Android":
     break;
     case "UWP":
     break;
     default:
     break;
 }

您也可以这样做:

<ContentView>
        <OnPlatform x:TypeArguments="View">
            <On Platform="iOS">
                <Label Text="iOS" />
            </On>
            <On Platform="Android">
                <Label Text="Android" />
            </On>
        </OnPlatform>
    </ContentView>