条件XAML导致UWP应用崩溃

时间:2018-07-12 16:52:35

标签: xaml uwp conditional

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

在下面,我有一个矩形,其填充定义了两次,一次用于1709年之前的内容,一次用于1709年及以后的版本。此代码有效

修改

下面的代码应为Version1803和Not1803。拉斐尔的答案是正确的。 Windows 10移动版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中定义的唯一属性是Opacity;任何其他定义的属性,例如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无法与目标应用程序通信。这通常表明目标应用程序的进程已中止。更多信息可以在“输出”窗口的“调试”窗格中找到(“调试”->“ Windows”->“输出”)。 程序“ [6928] [UWPAppName] .exe”已退出,代码为-1073741189(0xc000027b)。

我在做什么错了?

编辑 当我说1709年之前的版本时,仅涉及1703年,因为这是最低目标。在1703(内部版本15063)之前的版本中不支持条件XAML,因此这不是问题。

1 个答案:

答案 0 :(得分:1)

Windows 10 Mobile的最新版本不支持

AcrylicBrush。 文档(https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.acrylicbrush)指定了AcrylicBrush仅在Fall Creators Update 10.0.16299上可用,而该版本从未在Mobile上可用(可用的最新版本是10.0.15254.490)。

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

这里最好的选择是创建一个从FrameworkElement继承的类,该类具有所需的属性的Attached DependencyProperties。在该类中执行“合同”级别检查,并根据该级别使用适当的画笔更新背景属性。