UWP应用使用BodyTextBlockStyle等TextBlock样式时崩溃该如何解决
问题原因
你遇到的崩溃是XAML加载时找不到BodyTextBlockStyle、BodyStrongTextBlockStyle对应的资源,抛出HRESULT异常导致的,和你堆栈中winrt::throw_hresult的报错位置完全匹配。这两个样式是Windows 10 1809版本(内部版本17763)及以上才原生自带的UWP主题资源,低版本系统或未正确引入WinUI库时就会触发崩溃。
解决步骤
1. 调整项目目标版本
右键UWP项目选择「属性」,切换到「应用」选项卡:
- 目标版本设置为**Windows 10 版本1809(17763)**及以上
- 最低版本如果需要兼容低于17763的系统,后续需要添加回退样式兼容
2. (可选)引入WinUI 2库(推荐)
如果需要跨版本统一样式,可通过NuGet引入WinUI 2.x:
- 安装最新稳定版
Microsoft.UI.Xaml2.x系列NuGet包(3.x为WinAppSDK专用,不适用UWP) - 在
App.xaml中合并WinUI资源字典:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
3. 正确引用样式
在XAML中使用ThemeResource引用样式,适配系统深浅色主题:
<TextBlock Text="普通文本" Style="{ThemeResource BodyTextBlockStyle}"/> <TextBlock Text="加粗文本" Style="{ThemeResource BodyStrongTextBlockStyle}"/>
4. 低版本系统兼容
如果你的应用最低支持版本低于17763,在App.xaml或页面资源中添加回退样式即可:
<Style x:Key="BodyTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource DefaultTextBlockStyle}"> <Setter Property="FontSize" Value="14" /> <Setter Property="FontWeight" Value="Normal" /> <Setter Property="LineHeight" Value="20" /> </Style> <Style x:Key="BodyStrongTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource DefaultTextBlockStyle}"> <Setter Property="FontSize" Value="14" /> <Setter Property="FontWeight" Value="SemiBold" /> <Setter Property="LineHeight" Value="20" /> </Style>
排查技巧
如果XAML设计器中就提示找不到对应样式资源,说明版本或资源引用配置错误,无需运行即可定位问题。
内容的提问来源于stack exchange,提问作者rsp
相关产品推荐
相关产品推荐

