条件 XAML 使 UWP 应用程序崩溃

Conditional XAML Crashes UWP App

我的 UWP 应用的最低版本为 1703,最高版本为 1803。它还使用了 AcrylicBrush,直到 1709 才可用。我正在尝试使用条件 XAML 来创建 AcrylicBrush当前版本支持时(即版本为 1709 或更高版本)。

下面我有一个矩形,填充定义了两次,一次用于 1709 之前的任何内容,一次用于 1709 及之后的内容。此代码 有效 .

编辑:

下面的代码应该是Version1803和Not1803。 Rafael 的回答是正确的; Windows 10 Mobile 1709 会因此崩溃...但 1703 应该不会...。因此,为了简单起见,只需将“1709”替换为“1803”即可。话虽如此,有谁知道为什么它会在 1703 上崩溃?

--编辑结束。

xmlns:Version1709="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,5)"
xmlns:Not1709="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,5)"

<Rectangle x:Name="AcrylicRectangle">
     <Version1709:Rectangle.Fill>
           <AcrylicBrush Opacity="0.5"></AcrylicBrush> 
    </Version1709:Rectangle.Fill>
    <Not1709:Rectangle.Fill>
          <SolidColorBrush Color="Red" Opacity="0.5"></SolidColorBrush>
    </Not1709:Rectangle.Fill>
 </Rectangle>

这是独家新闻:1709 和更新版本有一个透明的矩形(因为没有设置颜色),1709 之前的版本有一个红色矩形,到目前为止还不错。这就是问题的开始。您会注意到我在 AcrylicBrush 中定义的唯一属性是不透明度;任何其他已定义的属性,如 TintColor、TintOpacity 等,都会使 1703 Mobile 上的应用程序崩溃。我尝试了很多不同的变体,但它们都有同样的问题:

<AcrylicBrush Version1709:TintColor="Red" Opacity="0.5"></AcrylicBrush>
<AcrylicBrush TintColor="Red" Opacity="0.5"></AcrylicBrush>
<Version1709:AcrylicBrush Version1709:TintColor="Red" Opacity="0.5"></Version1709:AcrylicBrush>
<Version1709:AcrylicBrush TintColor="Red" Opacity="0.5"></Version1709:AcrylicBrush>

从上面的四个 AcrylicBrushes 中,我在 1703 上在移动设备上运行时遇到此错误:

激活 Windows 商店应用程序 'a77e7506-7031-4935-ad70-ef56585020de_h83rr06hb5xc0!App' 失败,错误为“Windows 无法与目标应用程序通信。这通常表示目标应用程序的进程已中止。输出 window (Debug->Windows->Output)' 的调试窗格中可能提供了更多信息。 程序“[6928] [UWPAppName].exe”已退出,代码为 -1073741189 (0xc000027b)。

我做错了什么?

编辑 当我说 1709 之前的版本时,那只需要 1703,因为这是最低目标。早于 1703(内部版本 15063)的版本不支持条件 XAML,因此这不是问题所在。

AcrylicBrush Windows 10 Mobile 的最新版本不支持。 文档 (https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.acrylicbrush) 指定 AcrylicBrush 仅在 Fall Creators Update 10.0.16299 上可用,而移动设备从未可用(最新版本为 10.0.15254.490)。

我认为这里的问题是 AcrylicBrush 在最新的移动版本上不可用。

这里对您来说最好的选择是创建一个 class 继承自 FrameworkElement 并为您需要的属性附加 DependencyProperties。在 class 中检查合同级别,并根据该级别使用适当的画笔更新背景 属性。