2012-05-05 1 views
1

У меня есть что-то вроде этого: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 занимал все пространство.

Заранее благодарен!

ответ

1

Попробуйте добавить ScrollViewer.HorizontalScrollBarVisibility="Disabled" в список ListBox.

+0

Это не сработало. Я получаю такое же поведение (т. Е. Содержимое расширено вместо того, чтобы быть обернутым), но без полос прокрутки. – Paul

+0

Можете ли вы опубликовать полный код XAML? Если ваш ListBox изменяет размер, текст следует обернуть, используя ваш dataTemplate и HorizontalScroll отключен. Может быть, ваш список находится внутри stackPanel или что-то, что не позволяет изменить размер? – Leo

+0

Знаешь что? Это на самом деле * работает *! Я перечитал ваш ответ, и я понял, что делаю что-то еще, чем то, что вы предложили. Большое спасибо! – Paul

-1

вам не нужны определения столбцов, если это будет только один, попробуйте следующее:

<ListBox ItemsSource="{Binding List}"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock Text="{Binding Property}" TextWrapping="Wrap" HorizontalAlignment="Stretch"/> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+1

Мне нужны определения столбцов, потому что в сетке будут другие компоненты. Я пропустил их, чтобы упростить пример. Во всяком случае, я не вижу, как ваш пример отличается от моего, поскольку по умолчанию столбцы «*». – Paul

+0

Опуская их, вы не сможете получить хороший ответ –

+0

Хороший вопрос. Хорошо, поэтому забывайте все, что я сказал о необходимости использования других компонентов. И нет, удаление определений столбцов не работает и дает точно такой же результат. – Paul