Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
16.02.2012, 01:52
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
Здравствуйте. Если обсуждалось уже - не бить ногами, я новичок. Пробовал сделать свой базовый класс контрола, на основе которого сделать другие свои классы за счет наследования. Типа, Родительский класс: <UserControl x:Class="MyBase".... Потомок: <MyBase x:Class="MyControl".... (Это упрощенно, на самом деле там еще неймспейсы и др.) Так вот, это не работает. Если я использую события, но метод-обработчик события не виден в базовом классе, базовый класс выдает ошибку выполнения. Будто бы я указал имя не существующего метода. Если я не использую событий, то ошибки не возникает, но отображаются контролы только класса-наследника, а базоый класс вообще не отображается. Я поискал инфу, в том числе и на этом форуме. Правильно ли я понял, что визуальное наследование в SilverLight не риализовано и использоваться не должно? И правильно ли я понял, что можно достичь того же результата путем применения ContentControl, в котором нужно реализовать общую функциональность? Вместо наследования применяем агрегацию. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 09:36
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
jupiter, авторПравильно ли я понял, что визуальное наследование в SilverLight не риализовано и использоваться не должно? не понятно что вы вкладываете в понятие "визуальное наследование", но кастомные контролы вы можете писать сколь угодные наследуясь от примитивов либо создавая собственные. касательно остального не понятно что вы хотите сделать. смотрите в общем исходники контролов которые делают сотрудники Microsoft - Silverlight Toolkit ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 10:25
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
jupiterЯ поискал инфу, в том числе и на этом форуме. Правильно ли я понял, что визуальное наследование в SilverLight не риализовано и использоваться не должно? И правильно ли я понял, что можно достичь того же результата путем применения ContentControl, в котором нужно реализовать общую функциональность? Вместо наследования применяем агрегацию.Да. Помимо инкапсуляции через ContentControl можно ещё использовать attached property, Behavior<T> (из Expression Blend SDK), вынос логики во ViewModel и стили. Причём, стили, ViewModel и Behavior<T> можно наследовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 11:17
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
В xaml все есть. Помимо UserControl есть еще CustomControl. Идею простая: - наследуемся от нужного контрола, добавляем нужные DependencyProperty и обработчики событий или команд - переопределяем для него template, в нем добавляем нужные визуальные элементы и вызовы обработчиков событий или команд. Наиболее часто встречаемый вариант - наследник от ContentControl. Шаблон Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Пример использования <Controls:CustomControl Content="Любой контент + кнопки: Добавить; Удалить" /> ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 11:18
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
авторПомимо инкапсуляции через ContentControl можно ещё использовать attached property, Behavior<T> (из Expression Blend SDK), вынос логики во ViewModel и стили. Причём, стили, ViewModel и Behavior<T> можно наследовать. Как много путей... Я сейчас вкратце опишу задачу, и посоветуйте мне, пожалуйста, какой именно путь реализации наиболее подходит. В моем преложении SL есть диаграмма - квадратики, соединенные стрелочками. Квадратики должны иметь возможность менять размер за счет перетаскивания мышью границы. Но квадратики бывают у меня разные - внутри них разное содержимое. Появилась идея следать базовый контрол - квадратик с меняемыми размерами, назовем его ResizableBase (абстрактный класс). У него есть потомки - конкретные классы, которые я буду помещать на диаграмму (один из них - ResizableBorder). Все они унаследуют всойство менять размер. Внутри у каждого свое содержимое. Вот я и сделал так, но оно не работает: <UserControl x:Class="MyApp.ResizableBase" ....... потомки: <MyApp:ResizableBase x:Class="MyApp.ResizableBorder" ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 14:03
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
Тогда такой вопрос. Вот я решил сделать свой контрол Код: xml 1.
который потом в коде другого контрола можно было бы использовать вот так: Код: xml 1. 2. 3. 4. 5.
Именно в таком виде ругается, что нет свойства Content у класса ResizableBase. Как это сделать? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 16:33
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
jupiterКак много путей...Тут можно так, можно так, надо пробовать. Со стороны трудно сказать как лучше. jupiterИменно в таком виде ругается, что нет свойства Content у класса ResizableBase. Как это сделать?1. Отказаться от UserControl. Унаследовать от ContentControl + generic.xaml + стиль + ControlTemplate. или 2. В UserControl, добавить недостающее свойство. Добавить ContentControl в состав Вашего UserControl и забиндить его на это свойство. Не забыть указать ContentPropertyAttribute. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 16:35
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
3. Не делать свой контрол. Использовать имеющийся ContentControl + стиль для него + в стиле нужный Вам ControlTemplate. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.02.2012, 21:59
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
jupiter, http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1 http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-2 http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-3 http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-4 Отсюда я думаю подчерпнете все что нужно. На основе этих статей я делал дизайнер форм на сильверлайте =) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.02.2012, 12:21
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
[quot Алексей К]jupiter2. В UserControl, добавить недостающее свойство. Добавить ContentControl в состав Вашего UserControl и забиндить его на это свойство. Не забыть указать ContentPropertyAttribute. Спасибо. Я почти так и сделал. Вот решение: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
1. Вместо предлагаемого Вами ContentControl у меня ContentPresenter 2. К сложалению, пришлось в коде C# списать свойсово, которое я назвал InternalContent . Нужно подумать, как его объявить декларативно прямо в коде XAML 3. Что за атрибут ContentPropertyAttribute, я пока не разобрался. Но без него тоже работает. Но наверное, это что-то полезное. 4. По поводу создания стиля - притягательная идея, но у меня пока мало опыта и времени. Вопрос: если сдалать дополнительную функциональность, но можно будет реализовать в стиле реакцию на события? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.02.2012, 12:58
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
jupiter2. К сложалению, пришлось в коде C# списать свойсово, которое я назвал InternalContent . Нужно подумать, как его объявить декларативно прямо в коде XAML Лучше изучить сначала xaml и не переопределять то, что уже есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.02.2012, 13:31
|
|||
---|---|---|---|
|
|||
ContentControl вместо наследования? |
|||
#18+
SeVaЛучше изучить сначала xaml и не переопределять то, что уже есть. Я этим и занимаюсь )) Намекните хотя бы, плиз ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.02.2012, 13:43
|
|||
---|---|---|---|
ContentControl вместо наследования? |
|||
#18+
jupiter4. По поводу создания стиля - притягательная идея, но у меня пока мало опыта и времени. Вопрос: если сдалать дополнительную функциональность, но можно будет реализовать в стиле реакцию на события?Повторюсь. Обработку событий и прочий дополнительный функционал можно оформить через Attached Property или Behavior<T> . Attached Property можно назначить контролу через стиль. Behavior<T>, к сожалению, назначить через стиль нельзя (а если сильно хочется то можно, но через создание дополнительного attached property :-) ). Методика работы с присоединяемыми свойствами примерно такая: Не важно что делает этот код, важен принцип подписки на события Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
ЗЫ: Про Behavior<T> смотрите в документации про Expression Blend SDK ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=21&mobile=1&tid=1441930]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 409ms |
0 / 0 |