UWP项目绑定附加依赖属性Debug正常Release报XamlParseException如何解决
问题原因
- 首要原因是XAML绑定路径的大小写与C#代码定义不匹配
UWP的Debug模式未启用.NET Native工具链,XAML解析器对大小写有容错兼容;Release模式默认启用.NET Native编译,会严格匹配类型、成员的大小写。你在C#中定义的类名为MyDependencyClass、附加属性名为MyGlyph,但XAML中写为myDependencyClass.myGlyph,成员名称匹配失败触发XAML解析错误。 - 次要潜在原因是.NET Native编译裁剪
如果修正大小写后仍有报错,是因为.NET Native会裁剪未被显式调用的代码,你的附加属性所属类为抽象类,静态注册逻辑如果没有被托管代码直接调用,可能被裁剪导致XAML找不到对应属性。
修复方案
- 修正XAML绑定路径的大小写,修改后的绑定语句如下:
{Binding ElementName=MyPageUI, Path=(local:MyDependencyClass.MyGlyph)}
对应完整的FontIcon代码:
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="{Binding ElementName=MyPageUI, Path=(local:MyDependencyClass.MyGlyph)}" />
- (可选)避免编译裁剪
如果修正大小写后仍报错,可选择如下任意一种配置:
- 给
MyDependencyClass类添加[Windows.UI.Xaml.Data.Bindable]特性,告知编译器该类需要参与XAML绑定 - 在项目的
Properties/Default.rd.xml文件中添加如下配置,保留该类的所有成员不被裁剪:
<Type Name="你的命名空间.MyDependencyClass" Dynamic="Required All" />
内容的提问来源于stack exchange,提问作者Gregory Bologna
相关产品推荐
相关产品推荐

