|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
|||||||||||
Методы ArrangeOverride и MeasureOverride для позиционирования элементов10.01.2020, 14:50. Показов 2273. Ответов 33
Метки wpf controls (Все метки)
Добрый день, народ! В чем проблема не знаю как правильно позиционировать элементы в Panel и достичь аналогичного результата как на картинке слева. Думаю, что надо раскурочить методы ArrangeOverride и MeasureOverride, но не знаю как(((
Может кто сталкивался или подскажет куда копать? Методы ArrangeOverride и MeasureOverride в классе VirtualizingWrapPanel Кликните здесь для просмотра всего текста
Вот использую
0
|
|||||||||||
| 10.01.2020, 14:50 | |
|
Ответы с готовыми решениями:
33
Есть ли функция для резервации определенного места на сайте для постоянного позиционирования элемента?
|
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
|
| 11.01.2020, 19:01 [ТС] | |
|
Да они разные! Только в рамках группировки одинаковые.
0
|
|
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
||
| 12.01.2020, 15:05 [ТС] | ||
|
Google Фото я думаю, что там иначе все построено, так как это вебсайт и там другие компоненты верстки, но если попытаться реализовать на WPF наверное надо смотреть ListView с группировкой по дате и VirtualizingWrapPanel , а ItemTemplate это еще один ListView без группировки на VirtualizingWrapPanel. Блин это еще те танцы с бубнами, потом бороться с производительностью не понятно как это себя поведет, но можно попробовать. Кстати на счет производительности нашел реализованный VirtualizingObservableCollection https://www.nuget.org/packages... ollection/ еще не опробовал, так как придется пару моих классов переписать по загрузке изображений. Превосходство в том, что я и хотел LazyLoad о преимуществах данного подхода думаю не стоит говоить
0
|
||
|
Модератор
|
|||
| 12.01.2020, 15:14 | |||
|
По высоте исходных изображений в строке? Явно нет - они много больше. Что берётся за высоту строки? Если это задать, то остальное упрощается. У всех Image в строке привязать высоту к этому значению. А ширину ограничить каким-нибудь пропорциональным значением. Получатся все изображения одной высоты. Ширина согласно исходным пропорциям, но не более заданной. Добавлено через 1 минуту Не проверял, но так понял документацию.
0
|
|||
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
||
| 12.01.2020, 15:21 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 12.01.2020, 15:31 | ||
|
Загрузили в ListBox 10 000 ссылок на изображения. В его шаблоне элемента ссылка визуализируется через привязку в Image. В окно выводится первые 10 элементов. Но по факту, он грузит сразу все 10_000 элементов. Так было? Или память начинает "съедаться" после скрулла по ListBox?
0
|
||
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
||
| 12.01.2020, 15:31 [ТС] | ||
|
0
|
||
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
||
| 12.01.2020, 15:42 [ТС] | ||
|
Вот что MSDN пишет Создание большого количества элементов пользовательского интерфейса, если на экране может быть недостаточное количество элементов, может негативно сказаться на производительности приложения. VirtualizingStackPanel Например, выражение ListBox ItemContainerGenerator ListViewвычисляет количество видимых элементов и работает с элементом from (например, или) для создания элементов пользовательского интерфейса только для видимых элементов. ItemsControl Так что необходимо использовать VirtualizingStackPanel, но так как там компоновка в один столбец или строку, то пишут кастомный VirtualizingWrapPanel, какой у меня и кстати это самый приличный, что видел другие реализации полный трэш, тормозит, дергается и т.д.
0
|
||
|
Модератор
|
|
| 12.01.2020, 15:44 | |
|
Там же суть в чём.
Элемент визуализируется только когда он в видимой части окна. Как он визуализируется задаётся шаблоном данных. Поэтому если в источнике находятся ссылки на изображения, то ничего кроме этих ссылок не грузится. Сами ссылки и память под них задаётся в VM. LisBox (ListView и DataGrid) те ссылки которые должны быть отображены визуализирует используя шаблон. Получает по этому шаблону Image. Если уходит ссылка с экрана, то её Image сразу выгружается. Это можно проверить добавив обработчики Image.Loaded и Image.Unloaded. А вот если вы создаёте список не ссылок, а изображений, то здесь конечно нужная "ручная" настройка ленивой загрузки.
0
|
|
|
Модератор
|
||
| 12.01.2020, 15:53 | ||
|
Когда элемент не нужен убирается сильная ссылка на него. Но сам он остаётся в памяти. Если системе нужна память под что-то другое, она отправляет сборщика мусора. Сборщик очищает не всю память сразу. Он чистит по мере необходимости в свободной памяти. Сначала за счёт объектов на которых вообще нет ссылок. Потом за счёт тек на которых есть слабые ссылки, но нет сильных. Когда обращаетесь к объекту по слабой ссылки, проверяется его наличие в памяти. Если мусорщик ещё память под объект не очистил, то сразу возвращается сильная ссылка на этот объект. Если очистил, то объект заново грузится. Поэтому при использовании слабых ссылок память процесса будет расти. Но насколько это зависит от того как позволит система.
0
|
||
|
11 / 9 / 5
Регистрация: 09.10.2019
Сообщений: 84
|
|||||||
| 12.01.2020, 16:00 [ТС] | |||||||
|
Добавлено через 4 минуты Все равно заполняет память без остановки. Из VM я убрал вообще ImageSource Image остался только Uri
0
|
|||||||
|
Модератор
|
||||||||||||
| 12.01.2020, 16:23 | ||||||||||||
|
И добавьте обработчики загрузки и выгрузки. Проверьте как загружаются/выгружаются Image
По идее, когда изображение уйдёт с экрана оно должно выгрузится. Но возможно не сразу - это зависит от системы и её потребности в памяти. Добавлено через 14 минут Unsafe, я проверил у себя на простом примере
Загружаются только те изображения которые нужны на экране. Выгружаются не сразу, а после пролистывания на экран или чуть больше. Причем выгрузка - это не значит освобождения памяти! Освободится она только если это затребует система. А так если возвращается скрулл назад к уже выгруженным элементам, то если они ещё в памяти, то просто возвращается ссылка на них.
0
|
||||||||||||
| 12.01.2020, 16:23 | |
|
Свойства и методы элементов управления для пользовательской формы.
Создать стек сплошным представлением и продемонстрировать методы класса для стека из 15 элементов Разработать собственный класс, содержащий методы для нахождения количества отрицательных элементов массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|