Поиск…


DeviceFamily специальный код

В общем, UWP используется для создания одного приложения, которое выполняется в Windows 10 на разных устройствах. Тем не менее, также возможно сделать код, адаптированный к конкретным устройствам. Вы можете достичь этого несколькими способами.

Различные макеты XAML

Если вы хотите использовать определенный макет для определенного «семейства устройств», вы можете сделать это, создав новый элемент страницы XAML с тем же именем, что и файл XAML по умолчанию, с суффиксом, чтобы указать семейство устройств, на которое вы нацеливаете. Затем у вас будет MainPage.xaml для всех устройств и MainPage.DeviceFamily- [определенного семейства] .xaml только для одного определенного семейства, которое перезапишет макет по умолчанию, см. Ниже:

Изображение 1

Если вы хотите сделать это для большого количества файлов, вы можете создать папку с именем DeviceFamily- [конкретное семейство] и поместить в нее все страницы XAML, но теперь точно с тем же именем, что и файл XAML по умолчанию (см. Ниже). В обоих примерах все страницы будут иметь один и тот же файл с кодом, поэтому функциональность идентична, но макет соответствует конкретным размерам экрана.

Изображение 2

Код для конкретной семьи

Если вы хотите запустить часть кода или вашего ViewModel только для определенного семейства устройств, вы можете использовать свойство DeviceFamily из класса 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");
}
//....

Получить текущее семейство устройств

Вот простой переносной способ получить текущее семейство устройств:

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

Обнаруживать, поддерживается ли контракт API

В зависимости от версии устройства / выпуска системы некоторые API могут быть недоступны. Вы можете проверить, какой контракт поддерживается с помощью ApiInformation.IsApiContractPresent ()

Например, это вернет true на телефонных устройствах и ложно на других

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

Контракт, в котором находится API, доступен внизу страницы API в MSDN или глобальном списке, доступном на странице контракта API .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow