条件 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 中检查合同级别,并根据该级别使用适当的画笔更新背景 属性。
我的 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 中检查合同级别,并根据该级别使用适当的画笔更新背景 属性。