none
Как при создании контрола в Silverlight создать зависимые свойства типа UIElementCollection, RowDefinitionCollection и т. п.? RRS feed

  • Вопрос

  • Создаем в Silverlight новый контрол. Требуется добавить ему зависимые свойства типа коллекций. Желательно использовать стандартные имеющиеся коллекции типа UIElementCollectio, RowDefinitionCollection и т. п. Эти коллекции затем требуется передавать вложенным контролам.

    О создании свойств-коллекций написано тут: http://msdn.microsoft.com/en-us/library/cc903961(v=VS.96).aspx?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.WINDOWS.DEPENDENCYPROPERTY);k(TargetFrameworkMoniker-"SILVERLIGHT&k=VERSION=V4.0");k(DevLang-CSHARP)&rd=true

    Но возникает проблема, связанная с тем, что у указанных типов нет конструкторов. Поэтому ни создать метаданные, ни задать начальное значение в конструкторе контрола не удается. Можно, конечно, создать свойство типа List<UIElement>, но тогда каждый раз при установке нового значения придется проделывать много лишней работы. Есть ли возможность использовать непосредсвенно указанные типы?

    27 января 2011 г. 6:10

Все ответы

  • Сами UIElementCollection, RowDefinitionCollection использовать не получится, т.к. у них действительно нет открытого конструктора. На stackoverflow предложили использовать Collection<>. Вот топик - Adding a UIElementCollection DependencyProperty in Silverlight


    Для связи [mail]
    28 января 2011 г. 11:23
    Модератор
  • Да, спасибо. Я уже сам на эту статью вышел и так и сделал.

    Но всплыл еще один вопрос. Я хотел бы использовать в данном контексте ObservableCollection<> вместо Collection<>, чтобы автоматически получать уведомления о смене числа и ширин столбцов. К сожалению, простой сменой типа это сделать не получается, так как XAML строит Collection<>, что вызывает исключение при установке значения свойства-коллекции. Можно ли как-то указать в XAML, что нужна именно ObservableCollection<>?

    31 января 2011 г. 3:49