Создание экземпляра вложенного класса в 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.
Таким образом, нет решения для конкретного случая.