UWP DependencyObject 绑定 Windows.UI.Xaml.Markup.XamlParseException

UWP DependencyObject Binding Windows.UI.Xaml.Markup.XamlParseException

我有一个 Visual Studio 2019 UWP 项目,其中一个 XAML 页面使用依赖属性作为绑定值。 在调试模式下一切正常,但在发布模式下却不行。我绑定 VS relase 不喜欢的方式有什么问题?

下面的示例代码显示了一个 Windows.UI.Xaml.Controls.FontIcon 绑定到 MyDependencyClass DependencyObject class。

<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);
}

It's all working fine in debug mode but not in release.

我可以重现你的问题,xaml 绑定代码很有意义,请随意 post 你的问题与 windows 反馈中心或 post 在 WinUI issue 框。目前我们有一个解决方法,将 Binding 替换为 x:Bind,并使用静态 属性 替换 Attached 属性.

Xaml

<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="{x:Bind local:TestClass.Glyph}" />

代码

public static class TestClass
{
    public static string Glyph
    {
        get
        {
            return "\xE72E";
        }
    }

}