1

我打电话时遇到以下异常CompositionCapabilities.GetForCurrentView

System.UnauthorizedAccessException: '访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))'

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;

    // Exception happens here.
    var capabilities = CompositionCapabilities.GetForCurrentView();
}

奇怪的是代码编译正常,所以我假设 API 是可用的。我是否需要在 Package.appxmanifest 中声明任何功能?

4

1 回答 1

2

你不需要声明任何东西。该方法只是调用得太早了。

因此,不要在构造函数中调用它,而是在创建 Window 后立即调用它 -

protected override void OnWindowCreated(WindowCreatedEventArgs args)
{
    if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 4))
    {
        var capabilities = CompositionCapabilities.GetForCurrentView();
        var areEffectsSupported = capabilities.AreEffectsSupported();
        var areEffectsFast = capabilities.AreEffectsFast();
    }

    base.OnWindowCreated(args);
}

请注意,您需要添加一个检查以查看该 API 是否也受支持,就像上面的代码一样。

于 2017-06-07T08:49:23.880 回答