Создание экземпляра вложенного класса в XAML

в файле XAML (WPF UserControl), есть ли способ ссылаться на внутренний класс "B" , определенный в другом классе "A"?

public class A
{
    public class B
    {
    }
}

Что-то вроде:

<local:A.B ... />

Этот синтаксис не работает, потому что "B" интерпретируется как свойство с именем "B" в классе "A".

Я пробовал более экзотические синтаксисы типа "::" или "+", но никто не работает.

В настоящее время я использую Silverlight 4 с VS2010.

Заранее благодарим за помощь.

Ответ 1

Я искал и искал, потому что, если это возможно, я хотел бы знать. К сожалению, я нашел это на msdn:

Ваш пользовательский класс не должен быть вложенным класс. Вложенные классы и "точка"     в их общем синтаксисе использования CLR мешают другим WPF и/или XAML     такие как прикрепленные свойства.

Итак, похоже, вы не можете ссылаться на вложенный класс с помощью оператора точки. Что касается альтернативных способов добраться до этого внутреннего класса через XAML, мне еще не удалась в моих поисках.: o (Но это довольно интересная проблема, поэтому я продолжу поиск. Может быть, я нахожу удачу!: o)

Ответ 2

Этот вопрос довольно старый, и я не знаю, работало бы он с версией WPF еще в 2010 году, но теперь вы можете заставить его работать, используя "реальное" (внутреннее) имя вложенного типа

<local:A+B />

Если вы когда-либо просматривали дизассемблированный код, то как выглядят вложенные типы:

ParentTypeName+Nested

Ответ 3

. относится к собственности; не знаю, почему XAML не может также искать вложенный класс, но это не так.


Вложенный класс может быть представлен внутри строки (например, значение свойства), используя A+B вместо AB:

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

Как имя элемента (как показано на вопросе), + не разрешено, так как результат больше не будет действительным XML; + не является допустимым символом имени:
XAML - это XML.
Спецификация XML - NameChar.

Таким образом, нет решения для конкретного случая.