Чтобы отобразить другой элемент или задать иное значение свойства используется OnPlatform или TargetPlatform enum в зависимости от того, на какой платформе ведется работа. Периодически приходится это использовать, так как элементы иногда просто недостаточно хорошо работают на двух или более платформах. Но это можно легко сделать в XAML или C# (во вспомогательном коде). Одним из наиболее распространенных примеров этого является установка верхних полей в 20 пикселей с учетом строки состояния iOS. Эти свойства слегка изменились со времен 2.3.4, и теперь рекомендуется использовать приведенные ниже вещи.
OnPlatform
OnPlatform позволяет изменять свойство в XAML в зависимости от платформы. Используя элемент OnPlatform, установите для TypeArguments фактический тип свойства, которое требуется задать, в данном случае Padding имеет тип Thickness. В элементе добавьте On и задайте свойству Platform ту платформу, которая нужна. Это строка с разделителями запятыми.
1 2 3 4 5 6 7 8 | <ContentPage> <ContentPage.Padding> <OnPlatform x:TypeArguments="Thickness"> <On Platform="Android, UWP">0</On> <On Platform="iOS">0,20,0,0</On> </OnPlatform> </ContentPage.Padding> </ContentPage> |
В том случае если ничего не задано, свойство не меняется и используется по умолчанию. Если требуется узнать, какие значения доступны для присвоения, можно взглянуть на класс Device и свойство RuntimePlatform.
RuntimePlatform
Device.OS и TargetPlatform enum уже устарели, и теперь рекомендуется использовать Device.RuntimePlatform. Это просто строковое значение, и в классе Device есть ряд платформ, с которыми оно сравнивается.
1 2 3 4 5 6 7 8 9 10 11 12 13 | switch(Device.RuntimePlatform) { case Device.iOS: this.Padding = new Thickness(0,20,0,0); break; case Device.Android: case Device.UWP: case Device.macOS: default: // This is just an example. You wouldn't actually need to do this, since Padding is already 0 by default. this.Padding = new Thickness(0); break; } |
Просто выполните поиск класса Device с IntelliSense, чтобы найти ту платформу, которая нужна. Наиболее распространенные из них показаны на примере.
Резюме
Вообще-то, я был недоволен тем, что делаю Device.RuntimePlatform в виде строки, а не перечисления с флагами. Но, как оказалось, со строкой лучше. В этом случае теряется преимущество от наличия установленного листа поддерживаемых платформ в простом пространстве имен и приходится угадывать некоторые имена констант. Для новичков это просто еще одно препятствие, хотя ничего особо сложного здесь нет. В целом приемлемое решение. Оно задумано как простое расширение, куда в будущем можно будет легко добавить новые платформы.
Источник: XamarinHelp.com
Написать ответ