如您所知,在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
有什么想法吗?
答案 0 :(得分:3)
如您所知,在Windows 10 Build 10586上可以访问ElementCompositionPreview.GetElementVisual,我希望有一个可以同时针对Build 10586和Build 10240的应用程序
对于UWP应用程序,只有一个Target版本,根据您的要求,我们可以将Target版本设置为Build 10586和Min版本:Build 10240
有没有人知道在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
}