我的xaml代码
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid x:Name="grid" />
<TextBlock
x:Name="txtBlock"
Text="Drop Shadow"
FontSize="48"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</Grid>
</Grid>
代码背后的C#代码
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var compositor = ElementCompositionPreview.GetElementVisual(this.grid).Compositor;
var spriteVisual = compositor.CreateSpriteVisual();
spriteVisual.Size = this.grid.RenderSize.ToVector2();
var dropShadow = compositor.CreateDropShadow(); //**Here i am getting exception**
dropShadow.Mask = this.txtBlock.GetAlphaMask();
dropShadow.Offset = new Vector3(10, 10, 0);
spriteVisual.Shadow = dropShadow;
ElementCompositionPreview.SetElementChildVisual(this.grid, spriteVisual);
}
我遇到System.InvalidCastException类型的异常,内部消息是 无法转换类型为&#39; Windows.UI.Composition.Compositor&#39;的对象键入&#39; Windows.UI.Composition.ICompositor2&#39;。
能否找出问题所在,为什么这一行&#34; var dropShadow = compositor.CreateDropShadow();&#34;正在为我抛出异常。
答案 0 :(得分:0)
另外,对于您的信息。我已经在具有OS build 14393的机器上测试了相同的代码,它对我有用。我唯一关心的是如何在具有OS build 10586的机器上编译代码
正如我所说,DropShadow Class是从Windows 10 Anniversary Edition(v10.0.14393.0)引入的,所以它在10586中不支持。
因此,在运行相关API之前,您需要检测API是否在当前操作系统中可用。
请参阅此博客Dynamically detecting features with API contracts (10 by 10)。您可以使用ApiInformation Class相关API进行检测 功能。