Recherche…


Code spécifique à DeviceFamily

En général, UWP est utilisé pour créer une application unique qui s'exécute sur Windows 10 sur de nombreux périphériques différents. Cependant, il est également possible de créer un code adapté à des périphériques spécifiques. Vous pouvez y parvenir de plusieurs manières différentes.

Disposition XAML différente

Si vous souhaitez utiliser une mise en page spécifique pour une certaine «famille de périphériques», vous pouvez créer un nouvel élément de page XAML portant le même nom que le fichier XAML par défaut, avec un suffixe pour indiquer la famille de périphériques que vous ciblez. Ensuite, vous aurez MainPage.xaml pour tous les périphériques et MainPage.DeviceFamily- [famille spécifique] .xaml pour une famille spécifique, qui remplacera la présentation par défaut, voir ci-dessous:

Image 1

Si vous voulez faire cela pour beaucoup de fichiers, vous pouvez créer un dossier nommé DeviceFamily- [famille spécifique] et y mettre toutes les pages XAML, mais maintenant avec exactement le même nom que le fichier XAML par défaut (voir ci-dessous). Dans les deux exemples, toutes les pages partagent le même fichier code-behind, la fonctionnalité est donc identique, mais la mise en page est adaptée à des tailles d’écran spécifiques.

Image 2

Code pour une famille spécifique

Si vous souhaitez exécuter une partie de votre code-behind ou votre ViewModel sur une famille de périphériques spécifique uniquement, vous pouvez utiliser la propriété DeviceFamily de la classe AnalyticsVersionInfo .

AnalyticsVersionInfo avi = AnalyticsInfo.VersionInfo;
var deviceFamily = avi.DeviceFamily;

if(deviceFamily == "Windows.Mobile")
{
   Console.WriteLine("You're on mobile device right now.");
}
else if(deviceFamily == "Windows.Desktop")
{
   Console.WriteLine("You're on desktop");
}
else if(deviceFamily == "Windows.IoT")
{
   Console.WriteLine("You're on IoT");
}
//....

Obtenir la famille de périphériques actuelle

Voici un moyen simple et portable pour obtenir la famille de périphériques actuelle:

/// <summary>
/// All the device families 
/// </summary>
public enum DeviceFamily
{
    Desktop,
    Mobile,
    Iot,
    Xbox,
}

/// <summary>
/// The helper to get the current device family
/// </summary>
public static class DeviceFamilyHelper
{
    /// <summary>
    /// Return the family of the current device
    /// </summary>
    /// <returns>the family of the current device</returns>
    public static DeviceFamily GetDeviceFamily()
    {
        switch(ResourceContext.GetForCurrentView().QualifierValues["DeviceFamily"].ToLowerInvariant())
        {
            case "mobile":  return DeviceFamily.Mobile;    
            case "xbox":    return DeviceFamily.Xbox;
            case "iot":     return DeviceFamily.Iot;
            default:        return DeviceFamily.Desktop;
        }
    }
}

Détecter si un contrat API est pris en charge

Selon la version du périphérique / version du système, certaines API peuvent ne pas être disponibles. Vous pouvez vérifier quel contrat est pris en charge à l'aide de ApiInformation.IsApiContractPresent ()

Par exemple, cela retournera vrai sur les appareils téléphoniques et faux sur les autres

ApiInformation.IsApiContractPresent(typeof(CallsPhoneContract).FullName, 1)

Le contrat où une API appartient est disponible au bas de la page API de MSDN ou la liste globale est disponible à partir de la page de contrat de l' API .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow