Windows Phone 7 TextBlock TextWrapping не учитывается в списке - PullRequest
3 голосов
/ 26 марта 2011

У меня есть список, определенный как:

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

В коде я создаю несколько текстовых блоков в качестве элементов списка с включенным textWrapping в каждом текстовом блоке.

       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);
        }

Но текст в любом из текстовых блоков не переносится.

Может кто-нибудь сообщить мне, если приведенный выше способ определения текстовых блоков в списке неправильный?

Ответы [ 2 ]

2 голосов
/ 26 марта 2011

+ 1 за ответ Дерека

Также, пожалуйста, будьте осторожны, используя <StackPanel> в вашем ListBox. По умолчанию ListBox использует <VirtualizingStackPanel>, и это очень важно, поскольку при отображении длинных списков он использует значительно меньше ресурсов пользовательского интерфейса (памяти).

2 голосов
/ 26 марта 2011

Есть ли какая-то особая причина, по которой вы добавляете элементы в код?Судя по всему, у вас есть сбор данных, который вы можете установить как ItemsSource из ListBox, а затем использовать ItemTemplate, чтобы указать, как должен выглядеть каждый элемент.Что-то вроде следующего:

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

Обратите внимание, что стиль по умолчанию для ListBox уже включает в себя ScrollViewer, поэтому нет необходимости изменять ControlTemplate.Поскольку вы уже зафиксировали ширину ListBox, вышеприведенное должно "просто работать".

...