特定版本Windows 10的目标代码,例如Build 10586

时间:2016-04-06 21:37:48

标签: c# visual-studio windows-10 windows-10-universal

如您所知,在Windows 10 Build 10586上可以访问ElementCompositionPreview.GetElementVisual,我希望有一个可以同时针对Build 10586和Build 10240的应用程序。

有没有人知道在Build 10586上运行应用程序时如何使用Compositor和ElementCompositionPreview.GetElementVisual以及运行build 10240时的其他内容。

这样的事情:

  #if WINDOWS_UWP Build 10586
       _compositor = new Compositor();
       _root = ElementCompositionPreview.GetElementVisual(myElement);
  #endif


 #if WINDOWS_UWP Build 10240
  //other code
 #endif

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

  

如您所知,在Windows 10 Build 10586上可以访问ElementCompositionPreview.GetElementVisual,我希望有一个可以同时针对Build 10586和Build 10240的应用程序

对于UWP应用程序,只有一个Target版本,根据您的要求,我们可以将Target版本设置为Build 10586和Min版本:Build 10240 enter image description here

  

有没有人知道在Build 10586上运行应用程序时如何使用Compositor和ElementCompositionPreview.GetElementVisual以及运行build 10240时的其他内容。

请使用Windows.Foundation.Metadata.ApiInformation API动态检测功能:

if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.UI.Xaml.Hosting.ElementCompositionPreview"))
{
                if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.UI.Xaml.Hosting.ElementCompositionPreview", "GetElementVisual"))
                {
                    _compositor = new Windows.UI.Composition.Compositor();
                    _root = Windows.UI.Xaml.Hosting.ElementCompositionPreview.GetElementVisual(btn1);
                }
                else
                {
                    //Do other things
                }
}

以下是介绍此API的好文章:Dynamically detecting features with API contracts (10 by 10)

答案 1 :(得分:0)

我认为您可以使用System.Reflection从您的应用中获取操作系统版本,例如:

var analyticsInfoType = Type.GetType("Windows.System.Profile.AnalyticsInfo, Windows, ContentType=WindowsRuntime");
var versionInfoType = Type.GetType("Windows.System.Profile.AnalyticsVersionInfo, Windows, ContentType=WindowsRuntime");

if (analyticsInfoType == null || versionInfoType == null)
{
    //not on Windows 10
    return;
}

var versionInfoProperty = analyticsInfoType.GetRuntimeProperty("VersionInfo");

object versionInfo = versionInfoProperty.GetValue(null);
var versionProperty = versionInfoType.GetRuntimeProperty("DeviceFamilyVersion");
object familyVersion = versionProperty.GetValue(versionInfo);
long versionBytes;
if (!long.TryParse(familyVersion.ToString(), out versionBytes))
{
    //can't parse version number
    return;
}

Version DeviceVersion = new Version((ushort)(versionBytes >> 48),
  (ushort)(versionBytes >> 32),
  (ushort)(versionBytes >> 16),
  (ushort)(versionBytes));

if ((ushort)(versionBytes >> 16) == 10586)
{
    _compositor = new Compositor();
    _root = ElementCompositionPreview.GetElementVisual(myElement);
}
else
{
    //other code
}