|
Scrolling
|
|||
---|---|---|---|
#18+
Проблема в следующем. Имею кусок кода, который показывает коллекцию данных. Каждый элемент этой коллекции отображается внутри DataGrid с помощью шаблона содержащего кучу TextBlock-ов и TextBox-ов Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Модератор: для оформления xml-а есть [srс xml] При скроллировании этого набора колесом мышки все работает нормально до тех пор пока мышка не остановится над TextBox-ом. С этого места скроллинг (колесом мышки) не работает. Если сдвинуть мышь на TextBlock, то скроллирование нормально работает. Как это побороть? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 07:19 |
|
Scrolling
|
|||
---|---|---|---|
#18+
А зачем там текстбоксы? У DataGrid есть режим редактирования, в него и надо втыкать текстбокс, а для просмотра использовать текстблоки ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 08:18 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Я привел "обезжиренный" кусок кода, чтобы показать саму суть проблемы. TextBox находится не в самом DataGrid, а "зарыт" гораздо глубже. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 08:38 |
|
Scrolling
|
|||
---|---|---|---|
#18+
хм ну попробуй <TextBox VerticalScrollBarVisibility="Disabled"> ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 08:48 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Не помогло. В процессе прокрутки, как только мышь наезжает на это поле, то прокрутка останавливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 08:56 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Видимо придется убирать TextBox-ы до момента редактирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 08:58 |
|
Scrolling
|
|||
---|---|---|---|
#18+
ЧитательX, странно, у тебя и над TextBlock -ми не должно скроллиться. Вот мой рабочий вариант, когда нужно игнорировать скролл над элементами: Код: 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.
Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 09:04 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Над TextBlock-ами почему-то скроллинг работает. Пример я не очень понял. Тут показано как игнорировать скроллинг над DataGrid, а мне нужно все тоже самое, но наоборот. Осложняет ситуацию то, что, как я уже сказал, TextBox находится не в самом DataGrid, а "зарыт" гораздо глубже. DataGridRowDetail( DataGridRowDetail( DataGridRowDetail( ListBox( ... TextBlock-и, TextBox-ы ...)) ) ) Но, тем не менее, все что на этих уровнях находится не мешает скроллированию, а вот с TextBox-ми просто беда какая-то. Ладно, спасибо за обсуждение. Буду искать обходные пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 11:42 |
|
Scrolling
|
|||
---|---|---|---|
#18+
попробуй переопределить обработку событий мышки, либо задай параметр IsHitTestVisible=False ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 12:40 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Я попробовал применить Behavior (как указано в примере) - не помогло. Но, я проследил цепочку событий для MouseWheel (тунельные - Preview и всплывающие). Даже когда на каком-то уровне Behavior ставит e.Handled = true, то тунельное событие все равно проходит по всей ветке элементов до самого низа (с этим самым Handled = true) - т.е. движение вниз не прерывается. Видимо это происходит из-за того что в AssociatedObject.PreviewMouseWheel += AssociatedObject_PreviewMouseWheel; присутствует еще и старый обработчик, который тоже продолжает выполнятся. Поэтому, событие Wheel обслуживают "все кому не лень" (хотя при Handled = true не должны этого делать) По поводу " IsHitTestVisible=False" буду пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:18 |
|
Scrolling
|
|||
---|---|---|---|
#18+
ЧитательXЯ попробовал применить Behavior (как указано в примере) - не помогло. Но, я проследил цепочку событий для MouseWheel (тунельные - Preview и всплывающие). Даже когда на каком-то уровне Behavior ставит e.Handled = true, то тунельное событие все равно проходит по всей ветке элементов до самого низа (с этим самым Handled = true) - т.е. движение вниз не прерывается. Видимо это происходит из-за того что в AssociatedObject.PreviewMouseWheel += AssociatedObject_PreviewMouseWheel; присутствует еще и старый обработчик, который тоже продолжает выполнятся. Поэтому, событие Wheel обслуживают "все кому не лень" (хотя при Handled = true не должны этого делать) По поводу " IsHitTestVisible=False" буду пробовать. любое маршрутизируемое событие будет всплывать, даже если задать Handled=true. Создайте свой класс, наследуйте его от TextBox и переопределите эту логику ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:33 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Roman Mejtes любое маршрутизируемое событие будет всплывать Это понятно. Я говорю, что с момента когда на некотором элементе ставится Handled=true событие продолжает "спускаться" вниз по дереву в дочерние узлы (уже с признаком Handled=true), а уж потом по этой же цепочке всплывает вверх (туда откуда пришло). По идее признак handled=true должен исключить обработку в "нижних узлах", но он как-то ее не исключает :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 13:52 |
|
Scrolling
|
|||
---|---|---|---|
#18+
ЧитательX, попробуйте применить поведение IgnoreMouseWheelBehavior для всех элементов Вашего шаблона DataGrid(от верхнего элемента в визуальном дереве к нижнему). Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2018, 16:16 |
|
Scrolling
|
|||
---|---|---|---|
#18+
Я потренировался на простых примерах - "IgnoreMouseWheelBehavior" работает как положено. Только в моем реальном проекте, где большое наслоение всего на всем, что-то не везде получается. Видимо есть какие-то тонкости, которые мне придется "ловить" самому. Спасибо за обсуждение темы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2018, 06:06 |
|
|
start [/forum/topic.php?fid=21&msg=39698167&tid=1440397]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 253ms |
0 / 0 |