|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Привет всем! У меня в ListVew через ItemSource привязан набор некоторых сущностей. Хотелось бы показать картинку для каждой сущности, но картинку формировать налету в зависимости от атрибутов сущности. У меня в коде есть функция, которая добавляет в Canvas необходимые геометрические фигуры. Когда canvas принадлежит просто окну, то все работает. Но тут не могу понять, как его прицепить, чтобы для каждой сущности при создании соответствующей строки ListView формировалось необходимое изображение. Может есть какое-то событие OnCreate для строк или что-то подобное? или как это правильно сделать? Примерно - сущность содержит длину и ширину, надо на канвасе нарисовать прямоугольник с соответствующими размерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 14:53 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Нужно заменить ItemTemplate для ListView на свой, с канвасом и прочими пирожками. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 15:02 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Shocker.Pro, Свой DataTemplate я сделал, канвас у меня есть в каждом Item, но как при выводе Item в канвасе нарисовать геометрические фигуры? Заранее прямоугольник поместить нельзя - их несколько может быть и не только прямоугольники. Т.е. надо на лету формировать фигуры для канваса. У меня такая функция есть - принимает экземпляр сущности и канвас, размещает на канвас фигуры. Как заставить эту функцию работать на лету при создании Item'ов? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 15:18 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Если нужно подложить код, то можно сделать свой контрол (унаследоваться от Canvas, ContentControl или что там будет логичнее, или создать свой UserControl) и разместить этот контрол в шаблоне ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 15:50 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Shocker.Pro, Спасибо! Вариант с UserControl мне кажется проще. Правильно ли я понял, что мне надо создать контрол с канвасом, открытым свойством типа моего класса и методом типа Update()? Или сразу в конструктор контрола передавать класс? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 16:06 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Евгений, WPF - это прежде всего MVVM, забудь о методах, всё строится на привязках данных. Да, ты передаешь модель Item-а через свойство зависимости в свой контрол и обрабатываешь изменение этого свойства. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 16:18 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Shocker.Pro, Понял, спасибо большое. Буду разбираться с Dependency Property. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 18:12 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Используйте геометрию. Но есть одно но, если вы используйте много горизонтальных и вертикальных линий возникает проблема с тем, что линия может оказать не точно на пикселе, а между 2мя пикселями и будет размыта. Вообще эта проблема не зависит от способа, но когда линия является визуальным объектом (а не геометрией) её можно выровнять по пикселям с помощью свойства SnapsToDevicePixels, иначе придется использовать DrawingImage в котором размещать геометрию которая в примере и настраивать GuidelineSet, по которому геометрия и будет выравниваться. Код: 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.
Код: 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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 03:05 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Roman Mejtes иначе придется использовать DrawingImage в котором размещать геометрию которая в примере и настраивать GuidelineSet, по которому геометрия и будет выравниваться. Можно просто отнаследоваться от UIElement, и всё это сделать в OnRender. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 06:36 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Благодарю всех за ответы Roman Mejtes, спасибо за пример кода. Код: xml 1. 2. 3.
Правильно ли я понимаю, что это универсальный способ привязки любого кода (через конвертер)? Т.е. в моем случае это будет такой аналог события OnCreate? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 08:49 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург Правильно ли я понимаю, что это универсальный способ привязки любого кода (через конвертер)? Если тип данных привязанного значения совпадает с типом DependencyProperty, к которому сделана привязка, либо допускает неявную конвертацию в тип DependencyProperty, то конвертер не нужен. Евгений, Екатеринбург Т.е. в моем случае это будет такой аналог события OnCreate? OnCreate здесь вообще ни при чем. Да, привязка выполняется в т.ч. на этапе создания объекта, но она может изменяться при измении свойств модели, поддерживающей INotifyPropertyChanged, либо если изменяющееся привязанное свойство само по себе является DependencyProperty - такое часто бывает в ControlTemplate'ах, когда внутри шаблона свойства одних контролов привязывают к свойствам других. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 09:25 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
[quot Сон Веры Павловны#22016762] авторЕсли тип данных привязанного значения совпадает с типом DependencyProperty, к которому сделана привязка, либо допускает неявную конвертацию в тип DependencyProperty, то конвертер не нужен. Я просто раньше так не делал, я всегда писал Binding Path=.... Не знал, что можно так отдельно писать Path авторOnCreate здесь вообще ни при чем. Да, привязка выполняется в т.ч. на этапе создания объекта, но она может изменяться при измении свойств модели, поддерживающей INotifyPropertyChanged Мне это по сути и нужно - привязать некоторый код к WPF на этапе создания строки ListView. Понятно, что конвертер будет работать при изменении свойств и обновлять представление. Благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:52 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург Я просто раньше так не делал, я всегда писал Binding Path=.... Не знал, что можно так отдельно писать Path Здесь возможны два варианта: 1) Код: xml 1. 2. 3.
-здесь просто опущено ключевое слово Path, и приведенный код равносилен Binding Path=Zot. Надо сказать, что в ряде случаев это ключевое слово обязательно - например, при биндинге к свойству объекта, возвращаемого из attached property: Код: xml 1. 2. 3. 4. 5.
- если указать свойство без указания ключевого слова Path, то ошибки не будет, но и биндинг просто не будет работать. 2) То, что было приведено выше Романом - биндинг к Path.Data. Здесь у Binding Path не указан потому, что его нет, т.к. свойство Data связывается со всем имеющимся датаконтекстом. Аналог такой записи - "{Binding .}" или "{Binding Path=.}": Код: xml 1.
Код: c# 1. 2. 3. 4. 5.
- текстблок отобразит текст, заданный как DataContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 13:33 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
я еще поддерживается индексатор по этому такая запись будет так же правильной "{Binding [MyItem1]}" или "{Binding [0]}" Но плохо, что обновить данные из источника в элементу управления можно только для всех элементов индекса одновременно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:07 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Поясните еще пож про отличия Geometry объектов. Почему работает Код: c# 1. 2. 3.
Но не работает Код: c# 1. 2. 3. 4. 5. 6.
И с канвасом точно так же - не работает. У меня уже есть функция, которая необходимые элементы рисует на канвасе, хотелось бы использовать ее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 08:30 |
|
Canvas + ListView
|
|||
---|---|---|---|
#18+
Разобрался, объект Path имеет свойство Data, которое может принимать только объект типа Geometry. Видимо придется переделывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2019, 09:25 |
|
|
start [/forum/topic.php?fid=21&msg=39889985&tid=1440304]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 134ms |
0 / 0 |