StaticExtension value cannot be resolved
WPF绑定到静态属性时遇到一些问题。在我的应用程序中,有一个名为Globals的类,其中包含ThisAddIn的静态属性。这个对象允许我访问一个User属性,该属性基本上就是我想在Binding中使用的属性。因此,我的XAML如下所示:
1 2
| <TextBlock Text="{Binding Path=User.Name
, Source={x:Static Member=s:Globals.ThisAddIn}}" /> |
命名空间s由以下行在顶部声明:
1
| xmlns:s="clr-namespace:ConsoleApplication16.Model" |
我找到了很多关于如何在XAML中引用静态属性的方法,但是除此方法外,其他方法均无效,这对我来说似乎也是最合理的。我发现的一些示例根本没有使用Path或Member。
经过一些测试,我发现正确的方法是使用" x:Static Member"来定义要使用的类和静态属性,而Path会在此对象内定义正确的Properties,就像普通绑定一样。
尽管此解决方案可以毫无问题地进行编译,但会弹出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的固定语法。
-
@HB没错,我不确定为什么要在其中放置PropertyName。 {Binding PropertyName, Source={x:Static local:MyStaticClass.SomeStaticProperty}
-
这些课程是什么样的? XAML看起来不错。
-
"除此以外,它们都没有起作用。路径定义了该对象内的正确属性"。对不起,但这是无稽之谈。 StaticExtension没有Path属性,省去Member =的工作原理是因为您提供的值是StaticExtension构造函数的一个参数,该构造函数只是将Member设置为它。它有助于阅读文档,而不仅仅是尝试随机操作。"编译时没有任何抱怨,XAMLParseException会直接弹出" –您自相矛盾。
确保Globals.ThisAddIn是公开的。
如果您使用的是资源文件,也可能会遇到这种情况,在这种情况下,还需要确保将访问修饰符设置为Public:
-
而已! 在设计时正确设置属性值,然后在运行时由于该异常而失败,这没有任何意义。 很混乱。
-
天哪,你是对的! 我从来没有梦想过,代码设计师将能够在设计时访问我的资源,而编译会由于" ExtensionValue无法解析"而失败,这与@Steztric所写内容相同。 非常感谢!
-
我来到这里是因为我的resx文件具有内部修饰符。 将其更改为公开并且可以使用同样,在设计时它也可以使用,veeeery令人困惑
在输出库项目中,应确保默认情况下已将Resources.resx文件的生成器修改为PublicResXFileCodeGenerator而不是ResXFileGodeGenerator。
将以下内容替换为...
这个