У меня есть что-то вроде этого:Silverlight TextBlock внутри Listbox вызывает его расширение вместо оберточной текст
<ListBox ItemsSource="{Binding List}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property}" TextWrapping="Wrap" Grid.Column="0"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
И проблема у меня в том, что TextBlock расширит столбец сетки (и Listbox) когда текст слишком длинный, вместо того, чтобы обернуть его, как ожидалось. Возможно, я полностью не понимаю концепцию сетки сетки, но, как я ее вижу, поскольку ширина столбца равна «1 *», что означает «оставшееся свободное пространство», Textblock НЕ должен пытаться расшириться за пределы эту ширину, и вместо этого следует обернуть текст.
Так как я могу исправить эту проблему? Кстати, мне нужен Grid (или какой-то другой контейнер), потому что помимо Textblock будут другие компоненты. Также существует раздел ItemContainerStyle, чтобы элемент Listbox занимал все пространство.
Заранее благодарен!
Это не сработало. Я получаю такое же поведение (т. Е. Содержимое расширено вместо того, чтобы быть обернутым), но без полос прокрутки. – Paul
Можете ли вы опубликовать полный код XAML? Если ваш ListBox изменяет размер, текст следует обернуть, используя ваш dataTemplate и HorizontalScroll отключен. Может быть, ваш список находится внутри stackPanel или что-то, что не позволяет изменить размер? – Leo
Знаешь что? Это на самом деле * работает *! Я перечитал ваш ответ, и я понял, что делаю что-то еще, чем то, что вы предложили. Большое спасибо! – Paul