【问题标题】:TextBlock won't display the rest of it's text even when it's resized即使调整大小,TextBlock 也不会显示其余的文本
【发布时间】:2012-10-25 23:26:39
【问题描述】:

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

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

另外,但不是重要的:我不知道如何从 TextBlock 获得所需的全部高度以将其文本更改为,如果没有它,我必须将新大小设置为静态数字,我觉得这有损我的应用的用户体验。

谢谢, 杰斯


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

【问题讨论】:

    标签: c# xaml microsoft-metro


    【解决方案1】:

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

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

    【讨论】:

    • 我根本没有在我的 TextBlock 上定义高度,并且环绕设置为 Wrap。我将使用用于生成 TextBlock 的代码更新问题。此外,我最初使用 ListView,但由于我对它允许用户选择列表项的方式不满意而对其进行了更改。
    • 您可以在 LV 中禁用选择。您还需要共享托管 TextBlock 的面板的代码。
    • TextBlocks 的容器只是一个设置了高度的 Grid,包含在 ScrollViewer 中 XAML 生成的 StackPanel 中,除了默认属性之外,除了默认属性之外,其他任何内容都没有。
    • 我稍后会发布代码。现在必须赶路。
    • 好吧,如果设置了父 Grid 的高度,那么显然您可能无法将 TextBlocks 的所有内容都放入其中,因为它们的高度将受到网格高度的限制。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2019-10-14
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多