|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Делаю сравнивалку текстовых файлов (наподобии SVN-овского). Сделал 2 ListBox-а, в каждом первая колонка - номер строки, вторая - содержимое. Фон второй колонки строки меняется, в зависимости от содержимого. Первая колонка всегда серая. Как теперь показать selection? отрисовка выделенной строки всегда оказывается ПОД отрисовкой элементов строки. Мой код: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 12:42 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
У ListBoxItem есть свойство IsSelected - повесь на него триггер и делай что хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 12:54 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
А можно конкретно кусок кода? Попробовал вот так: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
что-то не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:12 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Так а что ты хочешь поменять-то? Ты меняешь ListBoxItem.Background, а тебе надо же менять фон твоего шаблона, правильно я понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:20 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Вот так хочу: ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:38 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Вообще, сделать это можно несколькими способами. Может, делать bg у элемента итема не правильно? Может, надо сделать какой-нибудь Converter, он будет конвертировать данные в цвет фона всего итема, тогда не надо будет расскрашивать текст. Если я правильно понял, если я сейчас сделаю замену фона, у меня selection всё равно будет "проваливаться" под второй TextBlock, у которого устанавливается свой bg. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:41 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Вот кстати, так и сделал, курсор перестал проваливаться, но он, почему-то всё равно не тёмно-красный. Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 13:49 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
2 пути: А) переопределить системный ресурс кисти для выделенных элементов в области ListBox Б) переопределить шаблон ListBoxItem и задать свой триггер на IsSelect ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 14:15 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
13th, можно просто сделать прозрачным цвет фона для шаблона выделенного элемента. А можно конкретным. При этом можно сделать это триггером прямо внутри шаблона, зацепив IsSelected через RelativeSource. Путей действительно много. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 14:24 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Shocker.Pro, этот путь неверный, нужно чётко отделять ControlTemplate'ы от DataTemplate'ов. Считаю, что DataTemplate не должен через поиск в визуальном дереве обращаться к свойствам шаблона элемента управления. DataTemplate должен визуализировать данные, модель представления, что угодно, но он не должен быть привязан к элементам управления. Вся суть в WPF и шаблона в абстракции, отделения мух от котлет. Когда у меня к примеру есть класс User и есть DataTemplate User, Я могу применять его в любой части программы зацепив из ресурсов в нужный файл, мне при этом не нужно задумываться о том, в каком именно визуальном дереве должен находится данный элемент. Как по мне, самый верный путь в данном примере, это переопределить шаблон элемента списка, для этого надо задать свойству ListBox.ItemContainerStyle стиль для элемента ListBoxItem, в стиле определить шаблон, который будет содержать ContentPresenter, в качестве шаблона для этого презентера будет выступать ItemTemplate или ItemTemplateSelector, а Content элемент коллекции. Не надо забывать еще 1 момент, при виртуализации элементы ListBoxItem существуют только в видимой части экрана (+/- n элементов), делая вот такие вот сложные финты в относительными источниками связывания, можно хапнуть горя. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 15:08 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Roman Mejtes2 пути: А) переопределить системный ресурс кисти для выделенных элементов в области ListBox Б) переопределить шаблон ListBoxItem и задать свой триггер на IsSelect Вот вариант А я уже где-то видел, сейчас попробую. Вариант Б - а я разве не то же самое делал? См. мои 1й и 3й посты? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 15:28 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Вариант №1: Код: 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.
Вариант №2 Код: 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.
Вариант №3: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 15:49 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
Все три метода работают, Роман, спасибо. Вот как бы ещё сделать, что бы фон не менялся, если фокус с листа ушёл? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 18:31 |
|
ListBox - ещё вопрос по фону
|
|||
---|---|---|---|
#18+
13thВсе три метода работают, Роман, спасибо. Вот как бы ещё сделать, что бы фон не менялся, если фокус с листа ушёл? разве в моих примерах он меняется? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2016, 18:33 |
|
|
start [/forum/topic.php?fid=21&fpage=12&tid=1440704]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 383ms |
0 / 0 |