Ich habe eine WPF-Listbox, in der Nachrichten angezeigt werden. Es enthält einen Avatar auf der linken Seite und den Benutzernamen und die Nachricht, die vertikal rechts vom Avatar gestapelt sind. Das Layout ist in Ordnung, bis der Nachrichtentext in Zeilenumbruch umgewandelt werden soll. Stattdessen wird eine horizontale Bildlaufleiste im Listenfeld angezeigt.
Ich habe gegoogelt und Lösungen für ähnliche Probleme gefunden, aber keines davon hat funktioniert.
<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>
Das Problem befindet sich möglicherweise nicht in der ListBox. Der TextBlock wird nicht umbrochen, wenn eines der übergeordneten Steuerelemente genügend Speicherplatz bietet, sodass es nicht umbrochen werden muss. Dies kann durch ein ScrollViewer-Steuerelement verursacht werden.
quelle
Wenn Sie verhindern möchten, dass TextBlock wächst und nur in die Größe des Listenfelds passt, sollten Sie die Breite explizit festlegen.
Um es dynamisch zu ändern, bedeutet es keinen festen Wert, aber Sie müssen ihn an das richtige übergeordnete Element im visuellen Baum binden. Sie können so etwas haben:
Wenn dies nicht funktioniert, versuchen Sie, die richtigen Elemente (die an was gebunden werden müssen) mit dem Live Visual Tree in Visual Studio zu finden.
quelle