windows phone 7 TextBlock TextWrapping not honored

2019-07-01 14:28发布

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?

2条回答
唯我独甜
2楼-- · 2019-07-01 14:29

+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.

查看更多
虎瘦雄心在
3楼-- · 2019-07-01 14:56

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 an ItemTemplate to specify what each item should look like. Something like the following:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox x:Name="myListBox" Width="468">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock FontSize="20" Text="{Binding}" TextWrapping="Wrap" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

Note, that the default style for the ListBox already includes the ScrollViewer so there's no need to change the ControlTemplate. Because you've already fixed the width of the ListBox, the above should "just work".

查看更多
登录 后发表回答