想在UWP Windows 10中实现DropShadow效果

时间:2017-11-28 11:12:42

标签: c# winrt-xaml windows-10-universal uwp-xaml windows-10-mobile

我的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;正在为我抛出异常。

1 个答案:

答案 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进行检测 功能。