UWP DependencyObject 绑定 Windows.UI.Xaml.Markup.XamlParseException
Posted
技术标签:
【中文标题】UWP DependencyObject 绑定 Windows.UI.Xaml.Markup.XamlParseException【英文标题】:UWP DependencyObject Binding Windows.UI.Xaml.Markup.XamlParseException 【发布时间】:2022-01-09 09:48:45 【问题描述】:我有一个带有 XAML 页面的 Visual Studio 2019 UWP 项目,该页面使用依赖属性来绑定值。 在调试模式下一切正常,但在发布模式下却不行。我绑定VS relase 不喜欢的方式有什么问题?
下面的示例代码显示了一个绑定到 MyDependencyClass DependencyObject 类的 Windows.UI.Xaml.Controls.FontIcon。
<FontIcon FontFamily="ThemeResource SymbolThemeFontFamily" Glyph="Binding ElementName=MyPageUI, Path=(local:myDependencyClass.myGlyph)" />
错误是 Windows.UI.Xaml.Markup.XamlParseException: 'XAML parsing failed.',这是由于 FontIcon 元素中的此绑定所致。控件的类型无关紧要,同样的错误。
Binding ElementName=MyPageUI, Path=(local:myDependencyClass.myGlyph)
public abstract class MyDependencyClass : DependencyObject
public static readonly DependencyProperty MyGlyphproperty;
public static void SetMyGlyph(DependencyObject DepObject, string value)
DepObject.SetValue(MyGlyphProperty, value);
public static string GetMyGlyph(DependencyObject DepObject)
return (string)DepObject.GetValue(MyGlyphProperty);
static MyDependencyClass()
PropertyMetadata MyPropertyMetadata = new PropertyMetadata("\xE72E");
MyGlyphProperty = DependencyProperty.RegisterAttached("MyGlyph",
typeof(string),
typeof(MyDependencyClass),
MyPropertyMetadata);
【问题讨论】:
【参考方案1】:在调试模式下一切正常,但在发布时却不行。
我可以重现您的问题,并且 xaml 绑定代码有意义,请随时将您的问题发布到 Windows 反馈中心或在WinUI issue 框中发布。目前我们有一个解决方法,将Binding
替换为x:Bind
,并使用静态属性替换附加属性。
Xaml
<FontIcon FontFamily="ThemeResource SymbolThemeFontFamily" Glyph="x:Bind local:TestClass.Glyph" />
代码
public static class TestClass
public static string Glyph
get
return "\xE72E";
【讨论】:
我不久前发布了 WinUI 问题,但它仍在分流中。 github.com/microsoft/microsoft-ui-xaml/issues/6306以上是关于UWP DependencyObject 绑定 Windows.UI.Xaml.Markup.XamlParseException的主要内容,如果未能解决你的问题,请参考以下文章
只能在 DependencyObject 的 DependencyProperty 上设置“绑定”
尝试绑定此 ValueConverter 时出现“只能在 DependencyObject 的 DependencyProperty 上设置绑定”错误
UWP:使用Behavior实现FlipView简单缩放效果