【问题标题】:StaticExtension value cannot be resolvedStaticExtension 值无法解析
【发布时间】:2012-04-04 03:23:39
【问题描述】:

我遇到了一些将 WPF 绑定到静态属性的问题。在我的应用程序中有一个名为 Globals 的类,它包含 ThisAddInstatic 属性。这个对象允许我访问一个基本上是我想在绑定中使用的用户属性。所以,我的 XAML 看起来像这样:

<TextBlock Text="{Binding Path=User.Name
                   , Source={x:Static Member=s:Globals.ThisAddIn}}" />

命名空间 s 在顶部由以下行声明:

xmlns:s="clr-namespace:ConsoleApplication16.Model"

我发现了很多关于如何在 XAML 中引用静态属性的不同方法,但除了这个之外,它们都不起作用,这对我来说似乎也是最合乎逻辑的。我发现的一些样本根本没有使用 Path 或 Member。

经过一些测试,我找到了正确的方法,就是使用“x:Static Member”来定义你想要使用的类和静态属性,而 Path 在这个对象中定义了正确的属性,就像普通的一样绑定就可以了。

虽然此解决方案编译时没有任何问题,但会直接弹出 XAMLParseException 告诉我 StaticExtension 值无法解析为枚举、静态字段或静态属性。

【问题讨论】:

  • 如果right way 抛出异常,它究竟是怎样的?
  • 此外,您应该能够删除 Path=Member=,因为这将调用设置相关属性的相应构造函数。
  • 我通常使用{Binding Source={x:Static local:MyStaticClass.SomeStaticProperty.PropertyName} 绑定到静态类/属性。请确保您的物业有get/set 评估员。例如,一定要使用public string PropertyName { get; set; } 而不是public string PropertyName;
  • @Rachel:这肯定行不通,因为x:Static 有一个固定的语法ns:Class.Property
  • @H.B.你是对的,我不知道为什么我把PropertyName 放在那里。 {Binding PropertyName, Source={x:Static local:MyStaticClass.SomeStaticProperty}

标签: wpf xaml data-binding static xamlparseexception


【解决方案1】:

确保Globals.ThisAddIn 是公开的。

如果您使用的是资源文件,您也可能会遇到这种情况,在这种情况下,您还需要确保将访问修饰符设置为 Public

【讨论】:

  • 就是这样!在设计时正确设置属性值然后在运行时失败并出现此异常是没有意义的。非常混乱。
  • 天哪,你是对的!我从来没有想过代码设计者能够在设计时访问我的资源,而编译会因为“ExtensionValue 无法解析”而失败——就像@Steztric 所写的一样。非常感谢!
  • 我来到这里是因为我的 resx 文件有内部修饰符。将其更改为 public 并且它可以工作同样,在设计时它可以工作,非常令人困惑
【解决方案2】:

在输出库项目中,请确保 Resources.resx 文件的生成器已默认修改为 PublicResXFileCodeGenerator 而不是 ResXFileGodeGenerator。

将以下内容替换为...

这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2019-08-03
    • 2013-04-11
    • 2021-12-29
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多