Xamarin 5 UWP平台调用DisplayAlert点击按钮触发未处理异常求助
问题根因
- Xamarin.Forms 5.x的UWP平台渲染层,
DisplayAlert对应的原生实现为UWP的ContentDialog控件,默认复用了Microsoft.UI.Xaml(WinUI 2.x)库提供的AnimatedIcon相关样式定义 - 异常触发的核心原因是UWP项目运行时无法解析AnimatedIcon的附加属性,通常是两个问题导致:一是显式安装的Microsoft.UI.Xaml版本和XF5依赖的版本不匹配,二是UWP项目的App.xaml未正确合并WinUI的主题资源字典,样式解析时找不到对应属性定义,点击按钮触发状态变更时就会抛出未处理异常
解决方案
按优先级依次尝试以下操作即可解决:
- 统一Microsoft.UI.Xaml版本
确认UWP项目安装的Microsoft.UI.Xaml为XF5官方适配的2.8.x版本,禁止安装3.x及以上版本(WinUI 3不兼容UWP),也不要使用低于2.7的旧版本。安装时保证所有关联项目的Nuget版本号完全一致,避免版本冲突。 - 手动引入WinUI主题资源
打开UWP项目的App.xaml文件,在<Application.Resources>节点下合并WinUI的资源字典,示例代码如下:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" /> <!-- 此处保留项目原本的其他合并资源字典配置 --> </ResourceDictionary.MergedDictionaries> <!-- 此处保留项目原本的其他资源配置 --> </ResourceDictionary> </Application.Resources>
- 自定义弹窗渲染器绕开依赖
如果上述操作后问题仍存在,可在UWP项目中实现自定义Page/Shell渲染器,重写DisplayAlert的原生实现,直接调用UWP原生MessageDialog实现弹窗,该实现不依赖WinUI的AnimatedIcon样式,可完全规避该异常。
内容的提问来源于stack exchange,提问作者Konstantinos K
相关产品推荐
相关产品推荐

