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 上设置绑定”错误

WPF - 转换器作为 DependencyObject

UWP:使用Behavior实现FlipView简单缩放效果

UWP:使用Behavior实现FlipView简单缩放效果

必须在与 DependencyObject 相同的线程上创建 DependencySource