I have a listbox defined as :
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox x:Name="myListBox" Width="468" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Template>
<ControlTemplate>
<ScrollViewer Width="468">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>
</ListBox>
</Grid>
In the code, I create multiple textBlocks as the Listbox Items with textWrapping enabled in each textBlock.
for (int i = 0; i < everyLine.Length; i++)
{
TextBlock txtBlock = new TextBlock()
{
TextWrapping = TextWrapping.Wrap,
Name = "textBlock" + i,
Foreground = textBrush,
FontSize = 20,
Text = everyLine[i]
};
this.myListBox.Items.Add(txtBlock);
}
But, none of the text in any of the text blocks gets wrapped.
Can somebody please let me know if the above way of defining textBlocks in listbox is incorrect?
+1 for Derek's answer
Also, please be careful using the
<StackPanel>
in your ListBox. By default, the ListBox uses a<VirtualizingStackPanel>
and this is very important as it uses significantly less UI resources (memory) when displaying long lists.Is there any particular reason why you are adding elements in code? By the looks of things you have a data collection, which you can set ast teh ItemsSource of the
ListBox
and then use anItemTemplate
to specify what each item should look like. Something like the following:Note, that the default style for the
ListBox
already includes theScrollViewer
so there's no need to change theControlTemplate
. Because you've already fixed the width of theListBox
, the above should "just work".