2012-11-06 31 views
0

我正在处理的应用程序从Internet检索信息,并将其显示在StackPanel内部的一系列网格中,这些网格嵌套在ScrollViewer中。即使调整大小,TextBlock也不会显示文本的其余部分

我的问题是:该应用程序显示内容的简短摘要,其思想是点击内容使网格和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); 

网格的高度在layoutPost方法设置,并且在960x75像素结束,邮政是扩展网格的一类,并且在此定义:

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

回答

0

如果您将TextBlock的高度设置为undefined并将TextWrapping设置为“自动换行” - TextBlock应自动增大到适合其文本所需的大小。

您可能遇到的另一个问题是,如果您尝试将大量这些TextBlocks放入您的ScrollViewer中。这可能表现不佳,因为您没有虚拟化您的内容并加载那么多文本需要大量的CPU处理能力。由于他们使用VirtualizingStackPanel来布置他们的子元素,通常使用ListBox或ListView对于这些场景来说是更好的选择。

+0

我还没有定义TextBlock上的高度,并且包装设置为Wrap。我将用我用来生成TextBlock的代码更新问题。另外,我首先使用了ListView,但是由于我不满意它如何允许用户选择列表项目而改变了它。 – Jase

+0

您可以禁用LV中的选择。您还需要共享托管TextBlocks的面板的代码。 –

+0

TextBlocks的容器只是一个高度设置的网格,包含在ScrollViewer的XAML生成的StackPanel中,除默认属性外没有任何其他内容。 – Jase

相关问题