wpf listbox word-wrap textblock

Fuerza TextBlock para envolver en WPF ListBox



word-wrap (3)

El contenido de TextBlock se puede envolver con la propiedad TextWrapping . En lugar de StackPanel , usa DockPanel / Grid . Una cosa más: establecer la propiedad ScrollViewer.HorizontalScrollBarVisibility en Disabled value para ListBox .

Actualizado Hidden a Disabled basado en el comentario de Matt. Gracias Matt.

Tengo un list box de WPF que muestra mensajes. Contiene un avatar en el lado izquierdo y el nombre de usuario y el mensaje apilados verticalmente a la derecha del avatar. El diseño está bien hasta que el texto del mensaje se ajuste a la palabra, pero en su lugar aparece una barra de desplazamiento horizontal en el cuadro de lista.

Busqué en Google y encontré soluciones a problemas similares, pero ninguno de ellos funcionó.

<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=FriendsTimeline}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Border BorderBrush="DarkBlue" BorderThickness="3" CornerRadius="2" Margin="3" > <Image Height="32" Width="32" Source="{Binding Path=User.ProfileImageUrl}"/> </Border> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding Path=User.UserName}"/> <TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow"/> <!-- This is the textblock I''m having issues with. --> </StackPanel> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>


El problema puede no estar ubicado en el ListBox. TextBlock no se ajustará, si uno de los controles principales proporciona suficiente espacio, para que no tenga la necesidad de ajustarlo. Esto podría ser causado por un control ScrollViewer.


Si desea evitar que TextBlock crezca y desea que se ajuste al tamaño del cuadro de lista, debe establecer el ancho de manera explícita.

Para cambiarlo dinámicamente, significa que no es un valor fijo, pero debe vincularlo a su elemento padre apropiado en el árbol visual. Puedes tener algo como esto:

<ListBox ItemsSource="{Binding MyItems}" Name="MyListBox"> <ListBox.Resources> <Style TargetType="ListBoxItem"> <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollContentPresenter}, Path=ActualWidth}" /> </Style> </ListBox.Resources> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Title}" TextWrapping="Wrap" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

Si no funciona, intente encontrar los elementos adecuados (que tienen que vincularse a qué) con el Árbol visual en vivo en Visual Studio.