2009-07-17 6 views
2

У меня есть ListBox в PopupControl. Проблема в том, что во время прокрутки Popup изменяет размер , чтобы соответствовать самому широкому элементу.WPF ListBox фиксированная ширина

Как я могу избежать этого изменения размера и автоматически настроить самый широкий элемент во всем списке?

Я попытался поместить его в Grid, но безуспешно.

+0

Вы можете рассчитать, насколько широкий конкретный ListBoxItem будет основан на его содержании? – exclsr

ответ

1

Если вы хотите сохранить виртуализацию, вы можете установить Popup.Width в константу.

Конечно, чтобы выбрать правильную константу, вам нужно будет вычислить (или, по крайней мере, догадываться), насколько широким будет каждый из ListBoxItem, и выберите максимальную. ... Обычно не сложно найти приблизительное предположение, основанное на вашем контенте.

6

ок это решение: Добавление этого свойства

<ListBox VirtualizingStackPanel.IsVirtualizing="False" 

изменение размера останавливается, потому что теперь панель содержит все элементы, а ширина регулируется соблюдая один широкий. С панелью виртуализации это только часть отображаемых элементов, а ListBox настраивает widht на фактический видимый самый широкий элемент.

Disadvantade в том, что мы не используем Виртуализация Panel больше (что по умолчанию на)

+0

Но это решение слишком медленно для многих предметов! –

0

Большинство WPF UIElement управления имеют Width свойство, которое может быть установлено на «Auto», таким образом они будут занимать столько же пространства как их самого широкого элемента.

+0

Я не думаю, что это работает в этом случае, поскольку ничто не определило, что самый широкий элемент, если виртуализация включена. – exclsr

+0

Точно. При включении виртуализации он не будет работать –

Смежные вопросы