Есть ли какой-либо способ создать экземпляр ‘Type’ в Silverlight XAML?

#silverlight #xaml #silverlight-4.0 #markup-extensions

#silverlight #xaml #silverlight-4.0 #разметка-расширения

Вопрос:

Хорошо известно, что Silverlight не хватает очень привлекательного x:Type MarkupExtension (MarkupExtension вообще не поддерживается в Silverlight). Есть ли какой-либо динамический обходной путь для этого?

Как насчет перечислений ( x:Static )?

Мне нужно, чтобы для CommandParameter было установлено значение Type или Enum , ни одно из них не поддерживается в Silverlight!

Ответ №1:

Обычно это должно быть сделано в коде за. Даже если вы создадите пользовательский объект, который предоставляет свойство type Type, оно не будет должным образом «преобразовано» при установке через XAML.

Это дополнительное ограничение не позволяет создавать такие вещи, как пользовательский EnumValueProvider, который предоставляет свойство Type и обновляет свойства Values значениями enum из указанного типа перечисления. Наличие подобного класса позволило бы вам полностью привязать ComboBox или ListBox к списку значений перечисления в XAML.

Вы можете создать пользовательский TypeConverter для вышеуказанного свойства Type, чтобы несколько обойти эту проблему. Но вы не получаете ожидаемого разрешения xmlns. Но в зависимости от вашей ситуации этого может быть достаточно.

Вот другой пример, который предоставляет «известные» типы через свойства, к которым вы затем можете привязаться.

Комментарии:

1. @Shimmy — Тогда, вероятно, лучшим выбором будет пользовательский IValueConverter и использование привязки, даже если это одноразовый.