|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
Есть проблема с быстродействием. Делаю UserControl, на него, упрощая описание задачи, динамически добавляю несколько тысяч кнопок. Кнопки должны занимать все пространство. xaml: Код: 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.
Для нескольких тысяч кнопок получается ну очень медленно. Без WrapPanel: Код: 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.
получается быстренько, как и надо. Вопрос - как повысить быстродействие в первом случае, когда несколько тысяч кнопок нужно раскидать по всему доступному пространству? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 13:30 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
WrapPanel, да тут все просто. в тормозном варианте, у тебя wrappanel создает все контролы сразу. в быстром, они создаются, только когда попадают в область видимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 14:25 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
AlexeiK, ок. а как мне добиться ситуации, когда и контролы раскиданы по всему полю, и работает быстро? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 14:31 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
WrapPanel, тебе нужно унаследоваться от virtualizingstackpanel и переопределить measure и arrange методы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 14:40 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
а потом свою панель подсунуть в itemscontrol. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 14:40 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
AlexeiK, ок. прошу прощения, а как именно переопределить? есть где-нибудь примерчик? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 14:46 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
AlexeiK, ок. большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2012, 15:00 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
Продолжу тему. Сделал свою панель, но унаследовал от Panel. Вроде работает. Код: 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. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
Наследую от VirtualizingStackPanel - работает, но ничего не показывает. В чем может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 10:11 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
Да, кстати, как заставить элемент, не попавший в окошко не отрисовываться? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 11:02 |
|
Медленный WrapPanel
|
|||
---|---|---|---|
#18+
WrapPanel, Вся фишка в том, что в VSP в этих методах, находится код, который не только размещает элементы. А еще и код, который их создает :) поэтому у тебя ничего не вышло при наследовании. Элемент не отрисовываться заставляет лишь только реализация интерфейса IScrollInfo у твоего класса панели. Собоственно VSP и сделана из Panel и IScrollInfo. Поэтому посмотри рефлектором код в этих методах у VSP или допиши свой класс, реализова еще и IScrollInfo тут пример -> ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 11:14 |
|
|
start [/forum/topic.php?fid=21&msg=37761111&tid=1441836]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 125ms |
0 / 0 |