| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Как использовать свойства UserControl? |
| Автор: dazy 3.4.2009, 12:34 |
| Если я делаю контрол и наследую его от UsesrControl, то по умолчанию он имеет множество различных свойств. Как ими пользоваться? Например как правильно воспользоваться свойством Foreground, чтобы не создавать свой аналог этого свойства? |
| Автор: Idsa 3.4.2009, 12:41 |
| Ничего особенного в их использовании, на мой взгляд, нет. Возьмем вышеуказанное свойство Foreground. Идем в MSDN. Видим, что это Dependency property со следующими флагами: AffectsRender, SubPropertiesDoNotAffectRender, Inherits. Значит при выставлении Foreground у UserControl, Foreground дочерних контролов также поменяется (если не прописан явно). |
| Автор: dazy 3.4.2009, 13:01 | ||||
| А можно на примере? Сделал кнопку как UserControl
В самом коде ни чего не пишу. На страничке пользуюсь этим контролом, выставляю свойства. Но эффекта нет. Кнопка все равно дефолтная.
Что у меня не так? Добавлено через 4 минуты и 59 секунд Еще вопрос. А если я в контрол вставляю объект у которого нет такого свойства как у UserControl. Например эллипс. У него есть свойство Fill. Как проще всего сделать, чтобы изменяя свойство Foreground у UserControl, у эллипса менялось Fill? |
| Автор: rooks 3.4.2009, 15:42 |
| Вы же выставляете свойства UserControl-у а не кнопке. Чтобы менять свойства кнопки можно биндить их на свойства UserControl-а. |
| Автор: dazy 3.4.2009, 15:47 | ||
Да, это я понимаю. У меня вопрос как это сделать! |
| Автор: rooks 3.4.2009, 15:59 | ||||
в данном примере можно вот так
или так
|
| Автор: dazy 3.4.2009, 16:51 |
| Это наверное для сильверлайта 3 да? У меня на ElementName ругается, говорит не могу узнать слово )))) |
| Автор: rooks 3.4.2009, 16:55 |
| это для WPF, как для сильверлайта не знаю... |
| Автор: dazy 7.4.2009, 14:52 | ||||||
| Еще раз подниму вопрос надеясь на мировой опыт: Я могу только переопределить, т.е. по факту написать свое свойство для юзерконтрола:
Все что я делаю выше, это передаю в Fill новую кисть. Но это не очень здорово использовать кодбихайнд для привязки, да. 1. Можно ли сделать тоже самое, т.е. использовать стандартное свойство Foreground, чтобы менять цвет у вложенных объектов, без переопределения Foreground? Т.е. можно ли как то подключиться к event'у который срабатывает при изменении свойства? 2. Как можно тоже самое сделать чрез замл? Есть простенький контрол:
Чтобы потом можно было пользоваться этим Юзерконтролом на страничке таким образом:
Любые идеи приветствуются! Все это про силверлайт |
| Автор: -Mikle- 7.4.2009, 16:29 | ||
Попробуйте вот так, вроде для Silverlight тоже должно работать (для десктоп приложений работает):
|
| Автор: dazy 7.4.2009, 17:14 |
| К сожалению SL2 не поддерживает RelativeSource |
| Автор: -Mikle- 7.4.2009, 17:39 |
| а ControlTemplate и TemplateBinding поддерживает? если да, то дам пример. |
| Автор: dazy 7.4.2009, 17:56 |
| Вроде да, поддерживает. ElementName - нет. |
| Автор: -Mikle- 7.4.2009, 19:03 | ||||
Тогда советую либо вообще отказаться от UserControl и сделать так:
либо сделать вот так:
Но что-то мне подсказывает, что в сильверлайте есть таки некий готовый Binding либо его подходящие свойства... уж слишком тривиальная задача, и делать так как я предложил, это мне кажется как через ж**у... |
| Автор: dazy 7.4.2009, 20:27 |
| WPF решения не работают. Во-первых, в СЛ binding действительно кастрированный до предела. Может с выходом 3й версии ситуация изменится. Во-вторых, похоже, что UserControl, это какое-то половинчатое решение. И чтобы делать более-менее приличный контрол, надо наследоваться от Control. Как я понял, при работе с UC, единственный возможный путь биндить свойство на отображение контрола это внутри кода DP. Чтобы биндить свойство внутри замл, нужно наследоваться от Control, и создавать шаблон, там можно и биндить. Так что придется переходить в на использование Control, или забить на замл, и все делать из кода. Или кто-то все же подскажет решение. Но я уже сомневаюсь, что оно вообще существует. По крайней мере во 2й версии СЛ. |
| Автор: dazy 8.4.2009, 12:44 |
| Плюнул я на SL2 с его геморойным биндингом. Перешел на 3ю версию. Надеюсь на его скорый оф.релиз. 3ка на голову делает 2ю версию. Пара кликов, и все биндится как в лучших домах. |
| Автор: -Mikle- 9.4.2009, 20:38 |
| Я по подобной причине перешел на 3.0 и 3.5. Делал в WinForms "нереальные" вещи, гордился что получалось, а потом решил все таки прочитать что такое WPF |