Start Debugging
PT-BR

Xamarin Forms - Usando OnPlatform

Aprenda a usar OnPlatform no Xamarin Forms para definir valores de propriedade específicos por plataforma, tanto em XAML quanto em C#.

Este site usa Walter, um agente de IA, para pesquisa, redação e manutenção. Processo editorial e de verificação

Ao desenvolver aplicações Xamarin Forms você frequentemente vai se deparar com situações em que precisa definir valores diferentes para uma propriedade dependendo do sistema operacional.

OnPlatform permite fazer exatamente isso e pode ser usado tanto em código C# quanto em XAML. Vamos a alguns exemplos. Para este artigo, vamos trabalhar com um novo projeto master-detail.

Usando OnPlatform com XAML

Na página About há um botão Learn More. Vamos deixar a cor dele dependente de plataforma: verde no Android, laranja no iOS e roxo no UWP.

<Button Margin="0,10,0,0" Text="Learn more" 
    BackgroundColor="{OnPlatform Android=Green, iOS=Orange, UWP=Purple}"
    Command="{Binding OpenWebCommand}"
    TextColor="White" />

E vejamos o resultado:

Página About do Xamarin Forms com o botão Learn More verde no Android e roxo no UWP.

Como alternativa, você pode usar a seguinte sintaxe, que é mais conveniente ao lidar com tipos de dado mais elaborados.

<Button Margin="0,10,0,0" Text="Learn more" 
        Command="{Binding OpenWebCommand}"
        TextColor="White">
    <Button.BackgroundColor>
        <OnPlatform x:TypeArguments="Color">
            <On Platform="Android" Value="Green"/>
            <On Platform="iOS" Value="Orange"/>
            <On Platform="UWP" Value="Purple"/>
        </OnPlatform>
    </Button.BackgroundColor>
</Button>

Usando OnPlatform com C# (obsoleto)

Mesmos requisitos do anterior, mas dessa vez em C# em vez de XAML. Primeiro vamos dar ao nosso botão um x:Name=“LearnMoreButton” e, em seguida, no code-behind, escrever o seguinte:

Device.OnPlatform(
    Android: () => this.LearnMoreButton.BackgroundColor = Color.Green, 
    iOS: () => this.LearnMoreButton.BackgroundColor = Color.Orange, 
    WinPhone: () => this.LearnMoreButton.BackgroundColor = Color.Purple,
    Default: () => this.LearnMoreButton.BackgroundColor = Color.Black);

Mesmo resultado de antes. WinPhone mapeia para UWP e você ainda pode especificar um valor padrão para o restante das plataformas. Esse método está obsoleto desde o XF 2.3.4, e recomenda-se que você escreva seu próprio switch case em cima de Device.RuntimePlatform.

Usando Device.RuntimePlatform

O código acima pode ser traduzido para:

switch (Device.RuntimePlatform)
{
    case Device.Android:
        LearnMoreButtonSwitch.BackgroundColor = Color.Green;
        break;
    case Device.iOS:
        LearnMoreButtonSwitch.BackgroundColor = Color.Orange;
        break;
    case Device.UWP:
        LearnMoreButtonSwitch.BackgroundColor = Color.Purple;
        break;
     default:
         LearnMoreButtonSwitch.BackgroundColor = Color.Black;
         break;
}

Os valores de plataforma suportados atualmente são: iOS, Android, UWP, macOS, GTK, Tizen e WPF.

O código-fonte do projeto de exemplo ficava originalmente no GitHub, mas o repositório não está mais disponível.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.