0

我正在开发的应用程序从 Internet 检索信息并将其显示在应用程序内 StackPanel 内的一系列网格中,StackPanel 本身嵌套在 ScrollViewer 内。

我的问题是:该应用程序显示了内容的简短摘要,其想法是单击内容会使 Grid 和 TextBlock 展开以显示其余内容,但是调整 TextBlock 的大小不会显示被剪切的文本原来是太短了。TextBlock 是在 c# 代码中动态创建的。

此外,但不是很重要:我不知道如何从 TextBlock 获得所需的全部高度来将其文本更改为,没有它我必须将新大小设置为静态数字,我觉得这有损于 UX我的应用程序。

谢谢,杰斯


更新:这是用于生成 TextBlock 的代码:

this.message = new TextBlock()
{
    VerticalAlignment = VerticalAlignment.Top,
    TextWrapping = TextWrapping.Wrap,
    MaxWidth = getWidth()
};
if(post.message != null) { message.Text = post.message; }

更新 2:这是创建 StackPanel (XAML) 的代码:

<ScrollViewer Grid.Column="1" Style="{StaticResource MainColumn}" VerticalScrollBarVisibility="Auto" SizeChanged="Feed_SizeChanged">
    <StackPanel x:Name="Feed"/>
</ScrollViewer>

这是生成父 Grid 的地方:

Post grid = new Post() { Margin = new Thickness(0, 0, 0, 5) };
Feed.Children.Add(grid);
grid.layoutPost(oldCount, count--, post, Feed, this);

Grid 的高度在 layoutPost 方法中设置,最终为 75px,Post 是一个扩展 Grid 的类,在这里定义:

class Post : Windows.UI.Xaml.Controls.Grid
4

1 回答 1

0

如果您未定义 TextBlock 的高度并设置 TextWrapping="Wrap" - TextBlock 应自动增长到适合其文本所需的大小。

您可能会遇到的另一个问题是,如果您尝试将大量这些 TextBlocks 放入 ScrollViewer。这可能效果不太好,因为您没有对内容进行虚拟化,并且加载那么多文本需要大量 CPU 资源来进行布局。通常使用 ListBox 或 ListView 是此类场景的更好选择,因为它们使用 VirtualizingStackPanel 来布置其子元素。

于 2012-11-06T05:45:36.340 回答