代码之家  ›  专栏  ›  技术社区  ›  Pragmateek

在XAML中创建嵌套类的实例

  •  34
  • Pragmateek  · 技术社区  · 14 年前

    在一个 XAML 文件(WPF用户控件),是否有方法引用 内部阶级 “B”在另一类“A”中定义?

    public class A
    {
        public class B
        {
        }
    }
    

    比如:

    <local:A.B ... />
    

    此语法不起作用,因为“b”被解释为类“a”中名为“b”的属性。

    我尝试过更奇特的语法,如“:”或“+”,但似乎没有一种有效。

    我正在使用 Silverlight 4 具有 VS2010 .

    事先谢谢你的帮助。

    3 回复  |  直到 6 年前
        1
  •  32
  •   HotN    9 年前

    我在搜索,因为如果可能的话,我想知道。不幸的是,我在 msdn :

    自定义类不能是嵌套的 班级。嵌套类和“点” 一般来说,clr的用法语法会干扰其他wpf和/或xaml 附加属性等功能。

    因此,似乎您不能用点运算符引用嵌套类。至于通过XAML到达内部类的其他方法,我在搜索中还没有找到任何运气。:o(但这是一个相当有趣的问题,因此我将继续搜索。也许我会找到运气的!o)

        2
  •  41
  •   Ludovic Chabant    12 年前

    这个问题已经很老了,我不知道它是否可以在2010年与WPF版本一起使用,但是现在您可以使用嵌套类型的“real”(内部)名称来实现它:

    <local:A+B />
    

    如果您曾经查看过反汇编的代码,那么嵌套类型就是这样的:

    ParentTypeName+Nested
    
        3
  •  3
  •   ToolmakerSteve    6 年前

    . 指的是 财产 ;不知道为什么XAML不能同时搜索嵌套类,但它不能。


    嵌套类 可以 被代表 当在字符串中时 (例如属性值),使用 A+B 而不是 A.B :

    <Label SomeProperty1="{x:Static local:A+B.SomeProperty2}" />
    

    作为元素名 (如问题所示) + 不允许,因为结果将不再是有效的XML; + 不是有效的名称字符:
    XAML is XML .
    XML Spec - NameChar .

    因此元素名不能直接描述嵌套类。
    但请参见下面的更新——解决这个问题的另一种语法。


    更新
    根据@artfunkel对一个答案的评论,这应该是一个解决方案[我还没有测试]:

    <x:Type TypeName="local:A+B"/>
    

    来自: https://docs.microsoft.com/en-us/dotnet/framework/xaml-services/x-type-markup-extension

    待定如何指定 性质 用那种句法。使用 x:TypeArguments ?