即使调整大小,TextBlock也不会显示文本的其余部分

时间:2012-11-06 03:08:03

标签: c# xaml microsoft-metro

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

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

此外,但并不重要:我不知道如何从TextBlock获取完整的所需高度以将其更改为文本,如果没有它,我必须将新大小设置为静态数字,我觉得这个数字有所减少我的应用程序的用户体验。

谢谢, Jase


更新:这是用于生成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>

这是生成父网格的地方:

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

1 个答案:

答案 0 :(得分:0)

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

您可能遇到的另一个问题是,如果您尝试在ScrollViewer中放入大量的这些TextBlock。由于您没有虚拟化内容并加载那么多文本需要大量的CPU功率来进行布局,因此可能执行得不是很好。通常使用ListBox或ListView是这类场景的更好选择,因为它们使用VirtualizingStackPanel来布置它们的子元素。