Eu tenho uma caixa de listagem WPF que exibe mensagens. Ele contém um avatar no lado esquerdo e o nome de usuário e a mensagem empilhados verticalmente à direita do avatar. O layout é bom até que o texto da mensagem seja quebrado, mas em vez disso, recebo uma barra de rolagem horizontal na caixa de listagem.
Pesquisei no Google e encontrei soluções para problemas semelhantes, mas nenhuma delas funcionou.
<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>
O problema pode não estar localizado na ListBox. O TextBlock não será quebrado, se um dos controles pai fornecer espaço suficiente, de forma que não seja necessário quebrar. Isso pode ser causado por um controle ScrollViewer.
fonte
Se você deseja evitar que TextBlock cresça, e deseja que apenas caiba no tamanho da caixa de listagem, você deve definir a largura dela explicitamente.
Para alterá-lo dinamicamente, não significa um valor fixo, mas você precisa vinculá-lo ao seu elemento pai apropriado na árvore visual. Você pode ter algo assim:
Se não funcionar, tente encontrar os elementos adequados (que devem ser vinculados a quê) com a Live Visual Tree no Visual Studio.
fonte