我正在尝试发布的 VS 2013 Update 2 并构建一个示例通用应用程序。
我创建了一个用户控件,并在两个 MainPages 上添加了 GridViews(在 Windows Phone 和 Windows 8 上)。
当应用程序在 Windows Phone 上运行时,我想通过代码更改一些内容。
有没有办法做类似的事情:
if(<deviceType> == "WindowsPhone")
{
}
else
{
}
我正在尝试发布的 VS 2013 Update 2 并构建一个示例通用应用程序。
我创建了一个用户控件,并在两个 MainPages 上添加了 GridViews(在 Windows Phone 和 Windows 8 上)。
当应用程序在 Windows Phone 上运行时,我想通过代码更改一些内容。
有没有办法做类似的事情:
if(<deviceType> == "WindowsPhone")
{
}
else
{
}
通常在构建应用程序时,您可以使用预处理器指令。在为 windows phone 构建应用程序时,默认定义为 VS WINDOWS_PHONE_APP
(查看项目属性 -> 构建 -> 条件编译符号)。因此,您可以在代码中的任何位置放置这样的语句:
#if WINDOWS_PHONE_APP
// do when this is compiled as Windows Phone App
#else
// not for windows phoen
#endif
您可以在 MSDN获得更多信息。
我建议使用这种方法,因此在大多数情况下,您确切知道何时将特定代码用于电话 (ARM) 或其他平台。当然,如果您需要,您可以为特定的构建配置/平台定义更多符号。
备注:从 W10 开始,需要在Run-Time中查看平台,那么可以使用ApiInformation 类查看 api 中是否存在特定类型。例如像这样:
if (ApiInformation.IsApiContractPresent("Windows.Phone.PhoneContract", 1))
// do code for mobile
else
// do code for other
这就是在通用 Windows (Windows 10) 项目中对我有用的
public static Platform DetectPlatform()
{
bool isHardwareButtonsAPIPresent =
ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");
if (isHardwareButtonsAPIPresent)
{
return Platform.WindowsPhone;
}
else
{
return Platform.Windows;
}
}
如果您想要确定当前设备的代码内方法,您可以试试这个:
public Windows.Foundation.Metadata.Platform DetectPlatform()
{
try
{
//Calls an unsupported API.
Windows.Networking.BackgroundTransfer.BackgroundDownloader.RequestUncontrainedDownloadsAsync(null);
}
catch (NotImplementedException)
{
//The API isn't supported on Windows Phone. Thus, the current platform is Windows Phone.
return Windows.Foundation.Metadata.Platform.WindowsPhone;
}
catch(Exception)
{
//Otherwise, this is Windows (desktop/RT).
return Windows.Foundation.Metadata.Platform.Windows;
}
}
来自 GitHub
public static class DeviceTypeHelper
{
public static DeviceFormFactorType GetDeviceFormFactorType()
{
switch (AnalyticsInfo.VersionInfo.DeviceFamily)
{
case "Windows.Mobile":
return DeviceFormFactorType.Phone;
case "Windows.Desktop":
return UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse
? DeviceFormFactorType.Desktop
: DeviceFormFactorType.Tablet;
case "Windows.Universal":
return DeviceFormFactorType.IoT;
case "Windows.Team":
return DeviceFormFactorType.SurfaceHub;
default:
return DeviceFormFactorType.Other;
}
}
}
public enum DeviceFormFactorType
{
Phone,
Desktop,
Tablet,
IoT,
SurfaceHub,
Other
}
或者你可以这样做
将此添加到
应用程序.Xaml.Cs
public static bool IsMobile
{
get
{
var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
return (qualifiers.ContainsKey("DeviceFamily") && qualifiers["DeviceFamily"] == "Mobile");
}
}
这是一种解决方法
//PC customization
if(ApiInformation.IsTypePresent("Windows.UI.ViewManagement.ApplicationView"))
{
}
//Mobile customization
if(ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
{
}