【问题标题】:windows phone 7 TextBlock TextWrapping not honored in listboxwindows phone 7 TextBlock TextWrapping 在列表框中不被接受
【发布时间】:2011-03-26 05:16:45
【问题描述】:

我有一个列表框定义为:

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

但是,任何文本块中的文本都没有被换行。

如果上面在listbox中定义textBlocks的方式不正确,可以告诉我吗?

【问题讨论】:

  • 感谢您的帖子,我遇到了类似的问题,我错过了 ListBox 上的 ScrollViewer.Horizo​​ntalScrollBarVisibility="Disabled" 属性,您的问题有助于找到它。

标签: silverlight windows-phone-7 listbox textblock


【解决方案1】:

Derek 的回答 +1

另外,请小心在列表框中使用&lt;StackPanel&gt;。默认情况下,ListBox 使用&lt;VirtualizingStackPanel&gt;,这非常重要,因为它在显示长列表时使用的 UI 资源(内存)要少得多。

【讨论】:

  • 你的意思是我们不应该使用 StackPanel 作为 DataTemplate
  • 不 - 我的意思是,如果您希望列表很长,请不要将 StackPanel 用作 ItemsPanelTemplate
【解决方案2】:

您在代码中添加元素有什么特别的原因吗?从外观上看,您有一个数据集合,您可以将其设置为ListBoxItemsSource,然后使用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 的宽度,所以上面应该“正常工作”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多