Programmazione con gli SDK di estensioneProgramming with extension SDKs

Per comprendere in che modo Windows 10 consente all'app piattaforma UWP (Universal Windows Platform) (UWP) di avere come destinazione in modo più efficace classi diverse di dispositivi, in questo argomento vengono illustrati i concetti seguenti.In order to understand how Windows 10 allows your Universal Windows Platform (UWP) app to most effectively target different classes of devices, this topic explains the following concepts.

  • Famiglia di dispositiviDevice family
  • SDK di estensioneExtension SDK
  • Contratto APIAPI contract

Viene anche illustrato come usarli nella programmazione.We also show how to use them in your programming.

Video — introduttivo alle famiglie di dispositivi e UWPVideo—Introduction to UWP and device families

 

Famiglie di dispositivi e famiglia di dispositivi di destinazione dell'appDevice families, and your app's target device family

Una famiglia di dispositivi identifica le API, le caratteristiche di sistema e i comportamenti che è possibile prevedere in una classe di dispositivi.A device family identifies the APIs, system characteristics, and behaviors that you can expect across a class of devices.

famiglie di dispositivi

Una famiglia di dispositivi è la base di un sistema operativo.A device family is the foundation of an operating system (OS). Ad esempio, i PC e i tablet eseguono un'edizione desktop del sistema operativo e si basano sulla famiglia di dispositivi desktop.For example, PCs and tablets run a desktop edition of the OS, and that's based on the Desktop device family. I dispositivi Internet delle cose eseguono un'edizione Internet del sistema operativo, basata sulla famiglia di dispositivi Internet.IoT devices run an IoT edition of the OS, which is based on the IoT device family.

Ogni famiglia di dispositivi figlio aggiunge le proprie API alle API ereditate dalla famiglia di dispositivi universali.Each child device family adds its own APIs to the APIs that it inherits from the Universal device family. L'Unione delle API risultante in una famiglia di dispositivi figlio è garantita per essere presente in un sistema operativo basato su tale famiglia di dispositivi e quindi su ogni dispositivo che esegue tale sistema operativo.The resulting union of APIs in a child device family is guaranteed to be present in an OS that's based on that device family, and therefore on every device running that OS.

La decisione relativa alla famiglia di dispositivi (o alle famiglie) a cui è destinata l'app è la scelta da apportare.The decision about which device family (or families) your app will target is yours to make. Questa decisione incide sulla tua app in modo rilevante, perchéAnd that decision impacts your app in these important ways. DeterminaIt determines

  • le famiglie di dispositivi a cui viene offerta l'app per l'installazione dal Microsoft Store e, di conseguenza, i fattori di forma che è necessario prendere in considerazione durante la progettazione dell'interfaccia utente dell'app) ethe families of devices that your app is offered to for installing from the Microsoft Store (and consequently the form factors that you need to consider when you design your app's UI), and
  • il set specifico di API su cui è possibile fare affidamento su un dispositivo che esegue l'app (il dispositivo host).the particular set of APIs that you can rely on being present on a device running your app (the host device).

Basandosi sulfatto che è possibile chiamare queste API senza dover prima eseguire test per verificare se sono presenti nel dispositivo host.By rely on being present, we mean that you can call those APIs without first needing to test to see whether they're present on the host device. La famiglia di dispositivi di destinazione fornisce tale garanzia (garanzie diverse per famiglie di dispositivi diversi).The device family that you target provides that guarantee (different guarantees for different device families).

Configurare la famiglia di dispositivi di destinazioneConfigure your target device family

Nel file di origine del manifesto del pacchetto dell'app ( Package.appxmanifest file), l'elemento TargetDeviceFamily ha un attributo Name .In your app package manifest source file (the Package.appxmanifest file), the TargetDeviceFamily element has a Name attribute. Il valore di tale attributo è il nome della famiglia di dispositivi a cui è destinata l'app.The value of that attribute is the name of the device family that your app targets. I valori seguenti sono validi.The following values are valid.

  • Windows. desktopWindows.Desktop
  • Windows. olograficoWindows.Holographic
  • Windows. tuttoWindows.IoT
  • Windows. mobileWindows.Mobile
  • Windows. teamWindows.Team
  • Windows. UniversalWindows.Universal
  • Windows. XboxWindows.Xbox

Per impostazione predefinita, l'app UWP è destinata alla famiglia di dispositivi universali (ovvero Microsoft Visual Studio specifica Windows.Universal per TargetDeviceFamily).By default, your UWP app targets the Universal device family (that is, Microsoft Visual Studio specifies Windows.Universal for TargetDeviceFamily). Ciò significa che l'app può essere installata su tutti i dispositivi Windows 10 e che è possibile basarsi su un set di API di grandi dimensioni presente nel dispositivo host.And that means that your app can be installed on all Windows 10 devices, and that you can rely on a large core set of APIs being present on the host device. Un'app come questa deve avere un'interfaccia utente altamente adattiva e funzionalità di input complete perché può essere eseguita in un'ampia gamma di dispositivi.An app like that needs to have a highly adaptive UI, and comprehensive input capabilities, because it can run on a wide variety of devices. Vedere visualizzare in anteprima l'interfaccia utente in diverse dimensioni dello schermo più avanti in questo argomento.See Preview your UI on different screen sizes later in this topic.

Se si vuole limitare le famiglie di dispositivi a cui viene offerta l'app per l'installazione dal Microsoft Store, è possibile scegliere di fare riferimento a una famiglia di dispositivi diversa, — ad esempio la famiglia di dispositivi desktop ( Windows.Desktop ) o la famiglia di dispositivi Internet ( Windows.IoT ).If you want to limit the families of devices that your app is offered to for installing from the Microsoft Store, then you can choose to target a different device family—for example, the Desktop device family (Windows.Desktop), or the IoT device family (Windows.IoT). Naturalmente, ci sarà un minor numero di dispositivi che possono ospitare l'app, ma sarà possibile fare affidamento su un set più ampio di API presenti nei dispositivi (che saranno impostati nella famiglia di dispositivi universali, oltre al set nella famiglia di dispositivi di destinazione).Of course, there'll be fewer devices that can host your app, but you'll be able to rely on a larger set of APIs being present on those devices (that will be the set in the Universal device family, plus the set in the target device family). Un'app come che in genere deve essere solo moderatamente adattiva; può essere un po' specializzato nell'interfaccia utente e nelle funzionalità di input, perché può essere eseguito solo su un tipo specifico di dispositivo.An app like that typically needs to be only moderately adaptive; it can be somewhat specialized in its UI and input capabilities, because it can run on only a specific kind of device.

Suggerimento

Tuttavia, è anche possibile ottenere il meglio di entrambi i mondi.But you can also have the best of both worlds. È possibile configurare l'app per l'esecuzione in tutti i dispositivi Windows 10 e accedere anche alle funzionalità specializzate di alcune famiglie di dispositivi quando si scopre che è in esecuzione in uno di essi.You can configure your app to run on all Windows 10 devices, and also access the specialized capabilities of certain families of devices when you find that you're running on one. Questo scenario migliore di entrambi i mondi richiede un po' di lavoro aggiuntivo, che verrà approfondito più avanti in questo argomento.This best-of-both-worlds scenario does require a little extra work, and we'll go into the specifics of that later in this topic.

Configurare la versione della famiglia di dispositivi di destinazioneConfigure your target device family version

Le API vengono aggiunte a Windows nel tempo, quindi un'altra dimensione per scegliere una famiglia di dispositivi sta decidendo la versione o le versioni di destinazione.APIs are added to Windows over time, so another dimension to choosing a device family is deciding which version (or versions) to target. In alcuni tipi di progetto in Visual Studio è disponibile una pagina delle proprietà nella quale è possibile configurare le versioni della piattaforma di destinazione.Some project types in Visual Studio have a property page in which you can configure your target platform versions. Per tutti i tipi di progetto è tuttavia possibile configurare le versioni della piattaforma di destinazione direttamente nel file di progetto.But for all project types you can configure your target platform versions right in the project file.

Di seguito è riportato un esempio che mostra le proprietà rilevanti in un file di progetto.Here's an example showing the relevant properties in a project file.

<!-- MyProject.Xxxproj -->
<PropertyGroup Label="Globals">
    ...
    <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
    <WindowsTargetPlatformMinVersion>10.0.17134.0</WindowsTargetPlatformMinVersion>
    ...
</PropertyGroup>

In fase di compilazione, questi valori (insieme al valore di TargetDeviceFamily@Name da Package.appxmanifest ) vengono copiati nel AppxManifest.xml file generato nella cartella di output del progetto.At build time, these values (together with the value of TargetDeviceFamily@Name from Package.appxmanifest) are copied into the AppxManifest.xml file that's generated in your project's output folder. Ecco un esempio.Here's an example.

<!-- AppxManifest.xml -->
<Dependencies>
    <TargetDeviceFamily Name="Windows.Universal"
        MaxVersionTested="10.0.19041.0"
        MinVersion="10.0.17134.0" />
    ...
</Dependencies>

MaxVersionTested specifica la versione massima del gruppo di dispositivi a cui è destinata l'app che è stata testata.MaxVersionTested specifies the maximum version of the device family that your app is targeting that you have tested it against. E MinVersion specifica la versione minima del gruppo di dispositivi a cui è destinata l'app.And MinVersion specifies the minimum version of the device family that your app is targeting. Per ulteriori informazioni, vedere TargetDeviceFamily.For more details, see TargetDeviceFamily.

Importante

È necessario configurare questi numeri di versione per mezzo delle pagine delle proprietà del progetto di Visual Studio o dei valori di WindowsTargetPlatformVersion e WindowsTargetPlatformMinVersion nel file di progetto.You should configure these version numbers by means of either your Visual Studio project's property pages, or the values of WindowsTargetPlatformVersion and WindowsTargetPlatformMinVersion in your project file. Non modificare AppxManifest.xml perché la compilazione sovrascrive tale file.Don't edit AppxManifest.xml, because the build overwrites that file. Non modificare gli attributi MinVersion e MaxVersionTested dell'elemento TargetDeviceFamily nel file di origine del manifesto del pacchetto dell'applicazione ( Package.appxmanifest file), perché tali valori vengono ignorati.And don't edit the MinVersion and MaxVersionTested attributes of the TargetDeviceFamily element in your app package manifest source file (the Package.appxmanifest file), because those values are ignored.

SDK di estensione e come farvi riferimentoExtension SDKs, and how to reference them

Se nel progetto di Visual Studio si modifica la destinazione dalla famiglia di dispositivi universali a un altro gruppo di dispositivi, è necessario aggiungere un riferimento all'SDK di estensione corrispondente a tale famiglia di dispositivi.If in your Visual Studio project you change your target from the Universal device family to some other device family, then you need to add a reference to the extension SDK corresponding to that device family. In questo modo le API della famiglia di dispositivi sono disponibili per il progetto.That makes the APIs in that device family available to your project.

Se, ad esempio, si fa riferimento alla famiglia di dispositivi Internet, quindi, dopo aver selezionato il nodo del progetto in Esplora soluzioni, fare clic su progetto > Aggiungi riferimento. > Windows universale > Estensionie selezionare la versione appropriata delle estensioni di Windows Internet per UWP.If, for example, you target the IoT device family, then (with the project node selected in Solution Explorer) click Project > Add Reference... > Universal Windows > Extensions, and select the appropriate version of Windows IoT Extensions for the UWP. Se, ad esempio, l'API più recente che si vuole chiamare è stata introdotta nella versione 10.0.17134.0, selezionare la versione.For example, if the newest IoT API that you want to call was introduced in version 10.0.17134.0, then select that version.

Selezionare l'SDK dell'estensione Internet

E questo è il modo in cui il riferimento è in grado di esaminare il file di progetto.And this is how that reference would look in your project file.

<ItemGroup>
    <SDKReference Include="WindowsIoT, Version=10.0.17134.0" />
</ItemGroup>

Il nome e il numero della versione corrispondono a quelli delle cartelle in cui è installato l'SDK.The name and version number match the folders in the installed location of your SDK. Ad esempio, le informazioni sopra indicate corrispondono alla cartella denominataFor example, the above information matches the folder named

\Program Files (x86)\Windows Kits\10\Extension SDKs\WindowsIoT\10.0.17134.0

Altri SDK di estensione includono le estensioni desktop di Windows per UWP, le estensioni Windows Mobile per UWPe le estensioni del team di Windows per UWP.Other extension SDKs include Windows Desktop Extensions for the UWP, Windows Mobile Extensions for the UWP, and Windows Team Extensions for the UWP.

Se si lascia l'app destinata alla famiglia di dispositivi universali, è comunque possibile aggiungere un riferimento a uno o più SDK di estensione.If you leave your app targeting the Universal device family, then you can still add a reference to one or more extension SDKs. Fare riferimento a qualsiasi SDK di estensione che contiene le API aggiuntive che si vuole chiamare.Reference whichever extension SDKs contain the additional APIs that you'd like to call. Si tenga presente che la destinazione è la famiglia di dispositivi universali, quindi queste sono le uniche API che è possibile utilizzare .Remember, you're targeting the Universal device family, so those are the only APIs that you can rely on being present. Per le API negli SDK di estensione a cui si fa riferimento, è necessario verificare che siano presenti nel dispositivo host in fase di esecuzione prima di chiamarli. per altre informazioni, vedi la sezione scrittura di codice più avanti in questo argomento.For APIs in the extension SDK(s) you referenced, you'll need to test that they're present on the host device at run time before you call them (more details in the Writing code section later in this topic). Naturalmente, non è necessario eseguire questo test per le API nel gruppo di dispositivi universali.Of course, you don't need to perform that test for APIs in the Universal device family. Questo è lo scenario migliore di entrambi i mondi indicato nella sezione precedente.This is the best-of-both-worlds scenario that we mentioned in the previous section.

Usando un SDK di estensione, è possibile indirizzare le API univoche di una famiglia specifica di dispositivi e quindi accedere alle funzionalità specializzate.By using an extension SDK, you can target the unique APIs of a specific family of devices, and thereby access their specialized capabilities. Questa operazione può essere eseguita indipendentemente dal fatto che la famiglia di dispositivi corrisponda o meno.You can do that whether you target the corresponding device family or not.

Contratti API e come cercarliAPI contracts, and how to look them up

Le API in una famiglia di dispositivi sono suddivise in gruppi noti come contratti API.The APIs in a device family are subdivided into groups known as API contracts. Quando viene rilasciata una nuova versione di un gruppo di dispositivi, la nuova versione rappresenta essenzialmente solo la raccolta di nuove versioni di tutti i contratti API che appartengono a tale famiglia di dispositivi.When a new version of a device family is released, that new version essentially just represents the collection of new versions of all of the API contracts that belong to that device family.

Ad esempio, il contratto API denominato Windows.Foundation.UniversalApiContract era nella versione 6,0 quando veniva fornito con la versione 10.0.17134.0 della famiglia di dispositivi universali.For example, the API contract named Windows.Foundation.UniversalApiContract was at version 6.0 when it shipped with version 10.0.17134.0 of the Universal device family. Ma lo stesso contratto si trovava alla versione 10,0 quando veniva fornito con la versione 10.0.19041.0 della stessa famiglia di dispositivi.But that same contract was at version 10.0 when it shipped with version 10.0.19041.0 of that same device family.

Cercare il contratto API per un'API WinRTLook up the API contract for a WinRT API

Vediamo come è possibile cercare il nome e il numero di versione del contratto API per qualsiasi API di Windows Runtime specifica.Let's see how you can look up the API contract name and version number for any given Windows Runtime API. Nella sezione scrittura di codice più avanti in questo argomento verranno illustrati i motivi e le modalità di utilizzo delle informazioni.In the Writing code section later in this topic, you'll see why and how you might use that information.

Come primo esempio, verrà preso il metodo StorageFolder. TryGetChangeTracker .As our first example, we'll take the StorageFolder.TryGetChangeTracker method. Nella sezione requisiti di Windows 10 di questo argomento è possibile vedere che StorageFolder. TryGetChangeTracker è stato introdotto per la prima volta con la versione 6,0 di Windows.Foundation.UniversalApiContract .In the Windows 10 requirements section of that topic, we can see that StorageFolder.TryGetChangeTracker was first introduced with version 6.0 of Windows.Foundation.UniversalApiContract.

Si osservi ora l'argomento relativo al metodo StorageFolder. TryGetItemAsync .Next, let's look at the topic for the StorageFolder.TryGetItemAsync method. In questo argomento non è disponibile alcuna sezione requisiti di Windows 10 .There is no Windows 10 requirements section in that topic. Si osservi invece l'argomento relativo alla classe StorageFolder .Instead, look at the topic for the StorageFolder class itself. La sezione requisiti di Windows 10 contiene la risposta.The Windows 10 requirements section there has the answer. Poiché l'argomento StorageFolder. TryGetItemAsync non dice alcuna differenza, è possibile concludere che condivide i requisiti con la relativa classe padre.Because the StorageFolder.TryGetItemAsync topic doesn't say any different, we can conclude that it shares its requirements with its parent class. Quindi , StorageFolder. TryGetItemAsync è stato introdotto per la prima volta con la versione 1,0 di Windows.Foundation.UniversalApiContract .So StorageFolder.TryGetItemAsync was first introduced with version 1.0 of Windows.Foundation.UniversalApiContract.

Come scegliere una famiglia di dispositivi di destinazioneHow to choose a device family to target

Di seguito sono riportate alcune considerazioni che consentono di decidere la famiglia di dispositivi di destinazione.Here are some considerations to help you decide which device family to target. Per ulteriori informazioni, vedere TargetDeviceFamily.For more details, see TargetDeviceFamily.

Massimizza la portata dell'appMaximize your app's reach

Per raggiungere la gamma massima di tipi di dispositivi con l'app e, di conseguenza, per eseguirla su tutti i dispositivi possibili, l'app deve essere destinata al gruppo universale di dispositivi.To reach the maximum range of kinds of devices with your app, and consequently to have it run on as many devices as possible, your app should target the Universal device family. In particolare, come abbiamo visto, avrai come destinazione una gamma di versioni della famiglia di dispositivi universali.Specifically, as we've seen, you'll target a range of versions of the Universal device family.

Limitare l'app a un tipo di dispositivoLimit your app to one kind of device

Potrebbe non essere necessario che l'app venga eseguita in un'ampia gamma di fattori di forma dei dispositivi. probabilmente è specializzato per un PC desktop o per una console Xbox.You may not want your app to run on a wide range of device form factors; perhaps it's specialized for a desktop PC, or for an Xbox console. In tal caso, è possibile scegliere di specificare come destinazione una delle famiglie di dispositivi figlio.In that case, you can choose to target one of the child device families.

Limitare l'app a un subset di tutti i dispositivi possibiliLimit your app to a subset of all possible devices

Anziché fare riferimento alla famiglia di dispositivi universali o alla destinazione di una delle famiglie di dispositivi figlio, è possibile indirizzare due o più famiglie di dispositivi figlio.Instead of targeting the Universal device family, or targeting one of the child device families, you can instead target two (or more) child device families. La destinazione di desktop e dispositivi mobili potrebbe avere senso per l'app.Targeting Desktop and Mobile might make sense for your app. O desktop e team.Or Desktop and Team. O desktop, mobile e team e così via.Or Desktop, Mobile, and Team, and so on.

Escludi il supporto per una particolare versione di un gruppo di dispositiviExclude support for a particular version of a device family

In rari casi, è possibile che l'app venga eseguita ovunque, tranne nei dispositivi con una particolare versione di una particolare famiglia di dispositivi.In rare cases, you might want your app to run everywhere except on devices with a particular version of a particular device family. Si immagini, ad esempio, che l'app sia destinata alla versione 10.0. x. 0 del gruppo di dispositivi universali.For example, let's say that your app targets version 10.0.x.0 of the universal device family. Quando le modifiche apportate alla versione del sistema operativo in futuro — si rivolgono a 10.0. x. 2 — a questo punto, è possibile specificare che l'app venga eseguita ovunque, ad eccezione della versione 10.0. x. 1 di Xbox, assegnando l'app a 10.0. x. 0 universale e 10.0. x. 2 di Xbox.When the operating system version changes in the future—say to 10.0.x.2—at that point, you can specify that your app runs everywhere except version 10.0.x.1 of Xbox by targeting your app to 10.0.x.0 of Universal and 10.0.x.2 of Xbox. La tua app non sarà quindi disponibile per il set di versioni della famiglia di dispositivi appartenenti alla versione di Xbox 10.0.x.1 (inclusa) e precedenti.Your app will then be unavailable to the set of device family versions within Xbox 10.0.x.1 (inclusive) and earlier.

Scrittura del codiceWriting code

Gran parte del codice sarà universale, nel senso che verrà eseguito allo stesso modo su ogni dispositivo.Much of your code will be universal in the sense that it will run the same way on every device. Tuttavia, per il codice personalizzato per una particolare famiglia di dispositivi, sarà possibile usare il codice adattivo.But for code tailored to a particular device family, you'll have the option to use adaptive code. Si prendano in considerazione questi casi diversi.Let's consider these different cases.

Chiamare un'API implementata dal gruppo di dispositivi di destinazioneCall an API that's implemented by your target device family

Quando si vuole chiamare un'API in un'app UWP, è necessario sapere se l'API è implementata o meno dalla famiglia di dispositivi a cui è destinata l'app.Whenever you want to call an API in a UWP app, you'll want to know whether or not the API is implemented by the device family that your app is targeting. Visual Studio IntelliSense mostra le API della famiglia di dispositivi universali e le API disponibili per tutti gli SDK di estensione a cui si fa riferimento.Visual Studio IntelliSense shows you the APIs in the Universal device family plus the APIs that are available for any extension SDK(s) that you've referenced.

La documentazione di riferimento dell'API Windows Runtime indica la famiglia di dispositivi di cui fa parte un'API.The Windows Runtime API reference documentation tells you which device family an API is part of. Se si cerca l'argomento di riferimento dell'API per un'API Windows Runtime e si cerca la sezione requisiti di Windows 10 , verrà visualizzata la famiglia di dispositivi di implementazione e la versione della famiglia di dispositivi in cui viene visualizzata prima l'API.If you look up the API reference topic for a Windows Runtime API and look for the Windows 10 requirements section, then you'll see what the implementing device family is, and which version of that device family the API first appears in. Se non è presente alcuna sezione requisiti di Windows 10 , esaminare la classe proprietaria del membro e visualizzare le informazioni nella sezione requisiti di Windows 10 .If there is no Windows 10 requirements section, then look at the member's owning class, and see the info in the Windows 10 requirements section there. Tali informazioni verranno applicate anche al membro.That info will apply to the member also.

Chiamare un'API non implementata dal gruppo di dispositivi di destinazioneCall an API that's not implemented by your target device family

Ci sono casi in cui si vuole chiamare un'API in un SDK di estensione a cui si fa riferimento, ma tale API non fa parte della famiglia di dispositivi di destinazione.There'll be cases when you want to call an API in an extension SDK that you've referenced, but that API is not part of the device family that you're targeting.

Ad esempio, è possibile usare la famiglia di dispositivi universali, ma è presente un'API desktop che si vuole chiamare ogni volta che l'app è in esecuzione su un dispositivo desktop.For example, you might be targeting the Universal device family, but there's a desktop API that you'd like to call whenever your app is running on a desktop device.

In alternativa, l'app potrebbe supportare le prime versioni di una famiglia di dispositivi, ma è presente un'API che si vuole chiamare disponibile solo nelle versioni più recenti della stessa famiglia di dispositivi.Or your app might support early versions of a device family, but there's an API that you want to call that's available only in very recent versions of the same device family.

In casi come questi, è possibile scegliere di scrivere codice adattivo per poter chiamare le API in modo sicuro.In cases like those, you can opt to write adaptive code so that you can call those APIs safely. Nella sezione successiva viene illustrato come.The next section shows you how.

Scrivere codice adattivo tramite ApiInformationWrite adaptive code by using ApiInformation

Sono necessari due passaggi per l'uso di codice adattivo per chiamare un'API in modo condizionale.There are two steps involved in using adaptive code to call an API conditionally. Il primo passaggio consiste nel rendere disponibile l'API per il progetto.The first step is to make the API available to your project. A tale scopo, aggiungere un riferimento all'SDK di estensione che rappresenta il gruppo di dispositivi proprietario dell'API.To do that, add a reference to the extension SDK that represents the device family that owns the API.

Il secondo passaggio consiste nell'usare la classe ApiInformation in una condizione nel codice per verificare la presenza dell'API che si vuole chiamare.The second step is to use the ApiInformation class in a condition in your code to test for the presence of the API that you want to call. Questa condizione viene valutata ogni volta che viene eseguita l'app.This condition is evaluated wherever and whenever your app runs. Ma restituisce true solo nei dispositivi in cui l'API è presente e pertanto disponibile per la chiamata.But it evaluates to true only on devices where the API is present and therefore available to call.

Se si vuole chiamare solo un numero ridotto di API, è possibile usare il metodo ApiInformation. IsTypePresent come questo.If you want to call just a small number of APIs, then you can use the ApiInformation.IsTypePresent method like this.

// Cache the value, instead of querying it multiple times.
bool isHardwareButtonsAPIPresent =
    Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");

if (isHardwareButtonsAPIPresent)
{
    Windows.Phone.UI.Input.HardwareButtons.CameraPressed += HardwareButtons_CameraPressed;
}

In questo caso, c'è fiducia che la presenza della classe HardwareButtons implica la presenza dell'evento CameraPressed , perché la classe e il membro hanno le stesse informazioni sui requisiti.In this case, there's confidence that the presence of the HardwareButtons class implies the presence of the CameraPressed event, because the class and the member have the same requirements info. Tuttavia, nel tempo, i nuovi membri verranno aggiunti a classi già introdotte e tali membri verranno introdotti in un secondo momento nei numeri di versione.But in time, new members will be added to already-introduced classes, and those members will have later introduced in version numbers. In questi casi, invece di usare IsTypePresent, puoi verificare la presenza di singoli membri con IsEventPresent, IsMethodPresent, IsPropertyPresent e metodi simili.In such cases, instead of using IsTypePresent, you can test for the presence of individual members by using IsEventPresent, IsMethodPresent, IsPropertyPresent, and similar methods. Ecco un esempio.Here's an example.

bool isHardwareButtons_CameraPressedAPIPresent =
    Windows.Foundation.Metadata.ApiInformation.IsEventPresent
        ("Windows.Phone.UI.Input.HardwareButtons", "CameraPressed");

Come sappiamo, il set di API all'interno di una famiglia di dispositivi viene suddiviso ulteriormente in suddivisioni note come contratti API.As we know, the set of APIs within a device family is further broken down into subdivisions known as API contracts. Puoi verificare la presenza di un contratto API usando il metodo ApiInformation.IsApiContractPresent.You can use the ApiInformation.IsApiContractPresent method to test for the presence of an API contract. Si tratta di un modo efficiente per eseguire una singola condizione per conoscere la presenza o, in caso contrario, di un numero elevato di API che appartengono tutte alla stessa versione di un contratto API.This is an efficient way of executing a single condition in order to know about the presence or otherwise of a large number of APIs that all belong to the same version of an API contract.

Per informazioni su come determinare il contratto API che ha introdotto per la prima volta le API di interesse, vedere la sezione cercare il contratto API per un'API WinRT più indietro in questo argomento.For info about how to determine the API contract that first introduced the API(s) of interest, see the Look up the API contract for a WinRT API section earlier in this topic.

Quando si dispone di queste informazioni, è possibile inserirle nel codice adattivo.Once you have that info, you can plug it into your adaptive code. Se, ad esempio, il nome del contratto API è Windows.Devices.Scanners.ScannerDeviceContract e i numeri di versione principale e secondaria sono rispettivamente 1 e 0, la condizione sarà simile all'esempio seguente.For example, if the API contract's name is Windows.Devices.Scanners.ScannerDeviceContract, and its major and minor version numbers are 1 and 0, respectively, then your condition will look like the example below.

bool isWindows_Devices_Scanners_ScannerDeviceContract_1_0Present =
    Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent
        ("Windows.Devices.Scanners.ScannerDeviceContract", 1, 0);

Visualizzare in anteprima l'interfaccia utente in diverse dimensioni dello schermoPreview your UI on different screen sizes

Si consiglia di ottimizzare la portata dell'app.We recommend that you maximize the reach of your app. Tuttavia, anche se si ha come destinazione un solo tipo di fattore di forma del dispositivo, è probabile che siano disponibili dimensioni diverse dello schermo in cui l'app potrebbe essere visualizzata.But even if you target only one kind of device form factor, there'll still likely be different sizes of screen that your app could end up being displayed on.

Quando si è pronti per verificare l'aspetto e la disattivazione dell'app in una determinata dimensione dello schermo, usare la barra degli strumenti di anteprima del dispositivo in Visual Studio per visualizzare in anteprima l'interfaccia utente su un dispositivo mobile piccolo o medio, su un PC o su uno schermo TV di grandi dimensioni.When you're ready to see how your app looks and lays out on a particular size of screen, use the device preview toolbar in Visual Studio to preview your UI on a small or medium mobile device, on a PC, or on a large TV screen. In questo modo, se sono state usate le funzionalità di layout adattivo di XAML (vedere esercitazione: creare layout adattivi), è anche possibile eseguire il test.That way, if you've used XAML's adaptive layout features (see Tutorial: Create adaptive layouts), then you can test that, too.

barra degli strumenti di anteprima del dispositivo in Visual Studio 2015

Non è necessario prendere una decisione in anticipo su ogni tipo di dispositivo che si supporterà.You don't have to make a decision in advance about every device type that you'll support. È possibile aggiungere al progetto un'ulteriore dimensione del dispositivo in qualsiasi momento.You can add an additional device size to your project at any time.

Vedere ancheSee also