Em Linux embarcado há uma demanda muito comum por aplicações modo "kiosk" "fullscreen". Nesse artigo eu mostro como deixar seu app Uno Platform Skia Gtk em modo "tela cheia".

Usando a API do UWP

Há um modo de fazer isso utilizando a API do UWP, por exemplo configurando o ApplicationView.PreferredLaunchWindowingMode logo na inicialização do App.xaml.cs:

// namespace rerefence
using Windows.UI.ViewManagement;
ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;

Maaaas, no Uno Platform o PreferredLaunchWindowingMode não está implementado.

⚠️ Talvez no futuro isso possa ser implementado, daí seria a forma recomendada a ser utilizada.

O que resta é usar a chamada ApplicationView.TryEnterFullScreenMode():

ApplicationView.GetForCurrentView().TryEnterFullScreenMode();

⚠️ É importante que isso seja chamado no final do OnLaunched do App.xaml.cs, ou mais especificamente após o _window.Activate();. Assim teremos um "current view" ativo.

Pronto, sua aplicação Uno Skia.GTK será lançada em tela cheia agora.

Cross-Platform

Bom, isso funciona muito bem se você estiver utilizando o Uno apenas para aplicações Skia.GTK em Linux Embarcado, e que precisem rodar em modo kiosk. Porém, se você estiver utilizando para aplicações cross-platform, que vão dar suporte para outros backends, plataformas, que não precisem rodar em modo kiosk isso será um problema.

Há duas formas de resolver isso. Usando a constante HAS_UNO_SKIA_GTK:

#if HAS_UNO_SKIA_GTK
    ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
#endif

Assim vamos aplicar o FullScreenMode apenas ao projeto Skia.GTK.

Mas vamos supor que você queira rodar esse aplicativo também em Linux mas em modo desktop "normal". Podemos usar uma variável de ambiente para ter um controle maior sobre isso:

if (Environment.GetEnvironmentVariable("UNO_FULLSCREEN") != null)
{
    ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
}