uwp
Семейство устройств
Поиск…
DeviceFamily специальный код
В общем, UWP используется для создания одного приложения, которое выполняется в Windows 10 на разных устройствах. Тем не менее, также возможно сделать код, адаптированный к конкретным устройствам. Вы можете достичь этого несколькими способами.
Различные макеты XAML
Если вы хотите использовать определенный макет для определенного «семейства устройств», вы можете сделать это, создав новый элемент страницы XAML с тем же именем, что и файл XAML по умолчанию, с суффиксом, чтобы указать семейство устройств, на которое вы нацеливаете. Затем у вас будет MainPage.xaml для всех устройств и MainPage.DeviceFamily- [определенного семейства] .xaml только для одного определенного семейства, которое перезапишет макет по умолчанию, см. Ниже:
Если вы хотите сделать это для большого количества файлов, вы можете создать папку с именем DeviceFamily- [конкретное семейство] и поместить в нее все страницы XAML, но теперь точно с тем же именем, что и файл XAML по умолчанию (см. Ниже). В обоих примерах все страницы будут иметь один и тот же файл с кодом, поэтому функциональность идентична, но макет соответствует конкретным размерам экрана.
Код для конкретной семьи
Если вы хотите запустить часть кода или вашего 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 .