Sök…


DeviceFamily-specifik kod

I allmänhet används UWP för att skapa en enda applikation som körs på Windows 10 på många olika enheter. Det är emellertid också möjligt att göra kod anpassad till specifika enheter. Du kan uppnå detta på flera olika sätt.

Olika XAML-layout

Om du vill använda en specifik layout på för en viss "enhetsfamilj" kan du göra detta genom att skapa ett nytt XAML-sidobjekt med samma namn som standard-XAML-filen, med ett suffix för att indikera enhetsfamiljen du riktar dig in. Då har du MainPage.xaml för alla enheter och MainPage.DeviceFamily- [specifik familj] .xaml bara för en specifik familj, som kommer att skriva över standardlayouten, se nedan:

Bild 1

Om du vill göra detta för massor av filer kan du skapa en mapp med namnet DeviceFamily- [specifik familj] och lägga in alla XAML-sidor i den, men nu med exakt med samma namn som standard XAML-filen (se nedan). I båda exemplen delar alla sidor samma kod bakom filen, så funktionaliteten är identisk, men layouten är anpassad till specifika skärmstorlekar.

Bild 2

Kod för specifik familj

Om du bara vill köra en del av din kod bakom eller din ViewModel på en specifik enhetsfamilj kan du använda egenskapen DeviceFamily från klassen 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");
}
//....

Få nuvarande enhetsfamilj

Här är ett enkelt bärbart sätt att få den nuvarande enhetsfamiljen:

/// <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;
        }
    }
}

Upptäck om ett API-kontrakt stöds

Beroende på enhetens / släppversionen av systemet kanske vissa API är tillgängliga. Du kan kontrollera vilket kontrakt som stöds genom att använda ApiInformation.IsApiContractPresent ()

Till exempel kommer detta att gälla sant på telefonenheter och falskt för de andra

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

Kontraktet där ett API hör hemma är tillgängligt längst ned på API-sidan på MSDN eller den globala listan är tillgängligt från API-avtalssidan .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow