Для определения платформозависимых значений свойств применяется класс OnPlatform<T>. Например, нам надо для каждой платформы установить свой текст и цвет текста элемента Label:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <Label VerticalOptions="Center" HorizontalOptions="Center"> <Label.Text> <OnPlatform x:TypeArguments="x:String" iOS ="iOS" Android ="Android" WinPhone="Windows 10" /> </Label.Text> <Label.TextColor> <OnPlatform x:TypeArguments="Color" iOS ="Yellow" Android ="Green" WinPhone="Red" /> </Label.TextColor> </Label> </ContentPage>
В качестве значения свойства Text и TextColor принимают объект OnPlatform
. Чтобы указать, значения какого типа должны быть переданы, применяется
атрибут x:TypeArguments. Например, свойство Text в качестве значения принимает строку, то есть объект типа String, поэтому устанавливаем
x:TypeArguments="x:String"
. А свойство TextColor принимает объект Color, поэтому пишем x:TypeArguments="Color"
Следующий набор атрибутов: iOS
, Android
и WinPhone
устанавливают значения для каждой операционной системы.
Значение WinPhone распространяется не только на Windows Phone, но и на десктопные версии Windows.
Также мы можем расписать определение OnPlatform более подробно, если, к примеру, мы должны передавать какой-то сложный объект. Например, свойство Padding, которое устанавливает внутренние отступы страницы, принимает объект Thickness:
<ContentPage.Padding> <OnPlatform x:TypeArguments="Thickness"> <OnPlatform.iOS> <Thickness Left="0" Top="20" Right="0" Bottom="0" /> </OnPlatform.iOS> <OnPlatform.Android> <Thickness Left="0" Top="0" Right="0" Bottom="0" /> </OnPlatform.Android> <OnPlatform.WinPhone> <Thickness Left="0" Top="0" Right="0" Bottom="0" /> </OnPlatform.WinPhone> </OnPlatform> </ContentPage.Padding>
Правда, в данном случае надо заметить, что настройки для Windows и Android принимают значения по умолчанию, то есть нулевые отступы от каждой стороны страницы. Изменения касаются лишь iOS. Поэтому в данном случае мы можем сократить установку Padding:
<ContentPage.Padding> <OnPlatform x:TypeArguments="Thickness" iOS="0,20,0,0" /> </ContentPage.Padding>