5

我正在尝试发布的 VS 2013 Update 2 并构建一个示例通用应用程序。

我创建了一个用户控件,并在两个 MainPages 上添加了 GridViews(在 Windows Phone 和 Windows 8 上)。

当应用程序在 Windows Phone 上运行时,我想通过代码更改一些内容。

有没有办法做类似的事情:

if(<deviceType> == "WindowsPhone")
{
}
else
{
}
4

6 回答 6

11

通常在构建应用程序时,您可以使用预处理器指令。在为 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
于 2014-04-24T11:58:06.530 回答
7

这就是在通用 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;
    }
}
于 2015-09-02T09:55:08.917 回答
1

如果您想要确定当前设备的代码内方法,您可以试试这个:

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

来源:https ://gist.github.com/Amrykid/2fd65ae1815a928fe753

于 2014-06-02T18:53:49.337 回答
1

来自 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
}

https://gist.githubusercontent.com/wagonli/40d8a31bd0d6f0dd7a5d/raw/f6175de5fcad40cc257edc3748c0e349495d17f6/DeviceTypeHelper.cs

于 2018-06-28T04:36:10.680 回答
1

或者你可以这样做

将此添加到

应用程序.Xaml.Cs

public static bool IsMobile
{
    get
    {
        var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
        return (qualifiers.ContainsKey("DeviceFamily") && qualifiers["DeviceFamily"] == "Mobile");
    }
}
于 2016-04-05T07:02:03.493 回答
-1

这是一种解决方法

       //PC customization
                if(ApiInformation.IsTypePresent("Windows.UI.ViewManagement.ApplicationView"))
                {
                }

                //Mobile customization
                if(ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
                {
                }
于 2016-04-12T08:58:14.127 回答