2016-04-06 54 views
3

正如你所知道ElementCompositionPreview.GetElementVisual是在Windows 10可訪問建10586,我想有一個應用程序,可以同時針對建立10586和建造10240目標代碼的Windows 10的特定版本,如建立10586

任何人不會有我如何使用合成器和ElementCompositionPreview.GetElementVisual當應用程序在構建10586和別的東西運行時,它運行的版本10240

事情是這樣的一個想法:

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


#if WINDOWS_UWP Build 10240 
    //other code 
#endif 

任何想法?

回答

3

正如你所知道ElementCompositionPreview.GetElementVisual是在Windows 10可訪問建10586,我想有一個應用程序,可以同時針對建立10586和10240建立

對於UWP應用程序,只有一個目標版本,爲您的要求,我們可以設定目標版本中生成10586和Min版本:構建10240 enter image description here

沒有人有當應用程序在構建10586和別的東西運行時,它運行的版本10240

請我如何使用合成器和ElementCompositionPreview.GetElementVisual的想法使用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)

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 
}