Списъчно поле в изчисленията на височината на ScrollViewer

Когато поставя ListBox в ScrollViewer, ако не дефинирам атрибут Height за ListBox, той не се превърта (освен че подскача малко нагоре и надолу), така че елементите извън екрана са недостъпни. Ако задам атрибута Height на ListBox на действителната височина, която заема на екрана, той се превърта идеално. Ако не получа точно височината, тя не се превърта правилно, напр. Може да не успея да достигна най-долните елементи в списъка.

Когато поставям други елементи в една колона LayoutRoot Grid над и под ScrollViewer/ListBox, задавам RowDefinition.Height="Auto" на всички редове с изключение на ScrollViewer's, който получава "*". Изглежда, че мрежата правилно разпределя пространството съответно. Освен че сега не знам предварително колко място заема ScrollViewer/ListBox.

Част A: Защо трябва да задавам височината на ListBox, неговата (виртуална) височина не варира ли в зависимост от броя на елементите?

Част Б: Изглежда, че трябва ръчно да очертая височините на редовете на мрежата, след което ръчно да ги направя отново, ако се изисква промяна на размера на шрифта или друг стил. така ли е Този подход изглежда фалшив.


person Paul Schmidt    schedule 12.04.2011    source източник
comment
Става още по-странно: Това, което искам, е списък с няколко популярни елемента в горната част, ред, който не може да се избира, след това пълният списък по-долу. Ако поставя тези три елемента в мрежа, съдържаща се в ScrollView, само долното ListBox се превърта, а не цялата мрежа. Това е напълно неинтуитивно. Даже грешно.   -  person Paul Schmidt    schedule 12.04.2011


Отговори (1)


Вашите проблеми са причинени от това, че имате ListBox в ScrollViewer. не прави това

Списъчното поле съдържа вътрешен ScrollViewer и (обикновено) ще нараства до наличното пространство.

Като по същество има ScrollViewer вътре в ScrollViewer, той не знае кой трябва да расте, за да пасне на наличното пространство и как трябва да се превъртат един спрямо друг.

Кажете ни какво се опитвате да направите. Има по-добър начин да го направите.

person Matt Lacey    schedule 12.04.2011
comment
ах Ако някой го е споменал в някой от другите форуми, пропуснал съм го. С тази корекция прави почти това, което искам. В идеалния случай бих искал да поставя разделител (използвам граница с минимална височина) вътре в ListBox, за да разделя две секции, вместо да използвам два списъка, разделени от граница. Причината да го направя по последния начин е, че ListBox позволява границата да бъде избрана. Мога да игнорирам избраното събитие за него, но анимацията/открояването все още се случва. - person Paul Schmidt; 12.04.2011
comment
Все пак ще маркирам оригиналния въпрос като отговорен. Благодаря! - person Paul Schmidt; 12.04.2011
comment
Добре, разбрах проблема с границите чрез използване на ListBoxItems в задния код. - person Paul Schmidt; 13.04.2011
comment
Не съм съгласен - откривам, че ScrollViewer в ListBox не превърта плавно, а щрака към височината на отделните елементи, това може да причини проблеми, когато височината може да бъде по-голяма. Задаването на ScrollViewer.HorizontalScrollBarVisibility и ScrollViewer.VerticalScrollBarVisibility на Hidden и капсулирането на ListBox в ScrollViewer разрешава това и позволява плавно превъртане. Не съм разглеждал дали е възможно да се активира плавно превъртане в ListBox ScrollViewer, тъй като това вероятно е по-елегантно решение. - person Duncan Watts; 13.07.2011