【问题标题】:UWP AcrylicBrush backwards compatibility with min version 14393 (Anniversary Update)UWP AcrylicBrush 向后兼容最低版本 14393(周年更新)
【发布时间】:2018-07-06 16:38:13
【问题描述】:

我正在开发我的 UWP 应用。我设置:

  • 目标版本:16299
  • 最低版本:14393

我使用了一些 AcrylicBrushes。因为需要16299版本,所以我有两个带画笔的文件:

  • Styles/Brushes.xaml (低于 16299 - 仅 SolidColorBrushes)
  • Styles/Fall/Brushes.xaml (16299 及以上 - SolidColorBrushes 和 AcrylicBrushes)

我在 App.xaml.cs 中使用下面的代码

private void SetupStyles() {
    var prefix = PlatformApiService.IsAcrylicBrushAvailable ? "Fall/" : string.Empty;
    var brushUri = new Uri($"ms-appx:///Styles/{prefix}Brushes.xaml", UriKind.Absolute);
    Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = brushUri });
}

当最低版本为 10586 时一切正常,但使用 14393 我的应用无法构建,因为:

类型“Windows.UI.Xaml.Media.AcrylicBrush”在合同“Windows.Foundation.UniversalApiContract”版本“5.0.0.0”下定义,但目标最低版本的合同版本是“3.0.0.0”!

类型“Windows.UI.Xaml.Media.IAcrylicBrush”的成员“BackgroundSource”在合同“Windows.Foundation.UniversalApiContract”版本“5.0.0.0”下定义,但目标最低版本的合同版本为“3.0” .0.0'!

类型“Windows.UI.Xaml.Media.IXamlCompositionBrushBase”的成员“FallbackColor”在合同“Windows.Foundation.UniversalApiContract”版本“4.0.0.0”下定义,但目标最低版本的合同版本为“3.0” .0.0'!

我不能使用Conditional XAML,因为它需要15063版本。我该怎么办?

【问题讨论】:

  • 当您将最低版本设置为 10586 时,我非常怀疑“一切正常”。如果某些资源仅适用于 Fall Creators Update (UniversalApiContract 5.0.0.0),如何从 Aniversary Update 更改最低版本(3.0.0.0) 到 11 月更新 (2.0.0.0) 解决问题了吗?
  • @AndréB 因为正如我所说,我使用两个不同的 Brushes.xaml 文件。在 app.xaml.cs 中,如果应用程序在旧版本上启动,它会添加带有 SolidColorBrushes 的 Brushes.xaml,否则添加带有 AcrylicBrushes (Fall/Brushes.xaml) 的那个。当最低版本设置为 11 月更新时,VS2017 成功完成构建,仅警告说秋季创作者更新支持 AcrylicBrush。但是当最小版本设置为周年纪念日时,VS2017 会中断构建并出现错误。
  • 作为Conditional XAML 文档,要创建最低版本低于内部版本15063 的版本自适应应用程序,您必须使用version adaptive code 而不是XAML。达不到你的要求吗?也很好奇最低版本为 10586 时一切正常,但不是 14393 时,您能提供一个简单的重现项目来帮助我们查看吗?

标签: c# .net xaml uwp backwards-compatibility


【解决方案1】:

您可以在 XAML 中制作资产 SolidColorBrushes,然后在 C# 中将它们覆盖为 Acrylic 画笔

if (ApiInformation.IsTypePresent("Windows.UI.Xaml.Media.AcrylicBrush"))
{
                    var brush= ((SolidColorBrush)App.Current.Resources["ExampleBrush"]).Color;
                    App.Current.Resources["ExampleBrush"] = new AcrylicBrush()
                    {
                        TintOpacity = ,
                        TintColor = brush,
                        FallbackColor = brush,
                        BackgroundSource = AcrylicBackgroundSource.HostBackdrop
                    };
}

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多