Определить ширину самого широкого элемента в ListBox - PullRequest
0 голосов
/ 23 сентября 2010

Если вы явно не установите ширину ListBox, он автоматически установит ширину для ширины самого широкого видимого элемента. Это означает, что при прокрутке вверх и вниз и изменении самого широкого видимого элемента данных ширина самого списка увеличивается и уменьшается.

Так, каков наилучший способ найти ширину самого широкого элемента в списке, а затем установить ширину ListBox? Моим шаблоном данных для ListBox является StackPanel, содержащий CheckBox и TextBlock, поэтому, очевидно, ширина Textblock будет варьироваться в зависимости от длины строки в нем.

В SO уже есть несколько предложений, ответы на которые варьируются от "угадать" до "измерить размер текста" (как измерить размер текста в SL, не помещая его в Элемент пользовательского интерфейса?).

Может кто-нибудь подсказать мне несколько идей? Я открыт для итерации всех экземпляров шаблона данных, если мне нужно, хотя лучшим вариантом может быть поиск самой длинной строки и вычисление оттуда?

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Не пробовал это, но это может работать: http://thibautvs.com/blog/?p=1775 «Ключевым моментом является размещение ListBox в столбце сетки с« автоматическим »режимом размера»

0 голосов
/ 18 октября 2010

Возникновение этого показало мне, что это невозможно без расширения / переопределения ListBox - установка свойства IsVirtualizing VirtualizingStackPanel не имела никакого эффекта.

Решение, с которым мне пришлось столкнуться, состояло в том, чтобы программно выбрать хорошую ширину.

0 голосов
/ 23 сентября 2010

ListBox использует VirtualizingStackPanel в качестве элемента ItemsPanel по умолчанию. Поскольку VirtualizingStackPanel создает элементы пользовательского интерфейса только для видимых элементов, вы можете увидеть поведение, которое вы описываете. Чтобы смягчить это поведение, вы можете попробовать установить VirtualizingStackPanel.IsVirtualizing = "False" или изменить ItemsPanel на StackPanel.

...