在XAML文件(WPF UserControl)中,有没有办法引用另一个类“A”中定义的内部类“B”?
public class A
{
public class B
{
}
}
就像是 :
<local:A.B ... />
此语法不起作用,因为“B”被解释为“A”类中名为“B”的属性。
我尝试了更多奇特的语法,例如“::”或“+”,但似乎都没有。
我目前正在使用Silverlight 4和VS2010。
在此先感谢您的帮助。
在XAML文件(WPF UserControl)中,有没有办法引用另一个类“A”中定义的内部类“B”?
public class A
{
public class B
{
}
}
就像是 :
<local:A.B ... />
此语法不起作用,因为“B”被解释为“A”类中名为“B”的属性。
我尝试了更多奇特的语法,例如“::”或“+”,但似乎都没有。
我目前正在使用Silverlight 4和VS2010。
在此先感谢您的帮助。
这个问题很老了,我不知道它是否适用于 2010 年的 WPF 版本,但现在您可以使用嵌套类型的“真实”(内部)名称使其工作:
<local:A+B />
如果您曾经看过反汇编代码,那么嵌套类型就是这样的:
ParentTypeName+Nested
我一直在寻找和寻找,因为如果这是可能的,我想知道。不幸的是,我在msdn上找到了这个:
您的自定义类不能是嵌套类。嵌套类及其常规 CLR 使用语法中的“点”会干扰其他 WPF 和/或 XAML 功能,例如附加属性。
因此,您似乎无法使用点运算符引用嵌套类。至于通过 XAML 访问该内部类的替代方法,我的搜索还没有任何运气。:o(但这是一个相当有趣的问题,所以我会继续寻找。也许我会找到一些运气!:o)
.
指财产;不知道为什么 XAML 也不能搜索嵌套类,但事实并非如此。
嵌套类可以在字符串(例如属性值)中表示,使用A+B
代替A.B
:
<Label SomeProperty1="{x:Static local:A+B.SomeProperty2}" />
作为元素名称(如问题所示),+
是不允许的,因为结果将不再是有效的 XML;+
不是有效的名称字符:
XAML 是 XML。
XML 规范 - NameChar。
所以元素名称不能直接描述嵌套类。
但请参阅下面的更新 - 解决此问题的替代语法。
更新
根据@Artfunkel对一个答案的评论,这应该是一个解决方案[我没有测试过]:
<x:Type TypeName="local:A+B"/>
来自:https ://docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-type-markup-extension
待定如何使用该语法指定属性。使用x:TypeArguments
?