0

私が取り組んでいるアプリは、インターネットから情報を取得し、ScrollViewer 内にネストされた StackPanel 内の一連のグリッドにアプリ内で表示します。

私の問題は次のとおりです。アプリはコンテンツの短い要約を表示します。コンテンツをクリックすると、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 はそのテキストに合わせて必要なサイズに自動的に拡大されます。

発生する可能性のある別の問題は、ScrollViewer にこれらの TextBlock を大量に配置しようとしている場合です。コンテンツを仮想化しておらず、大量のテキストを読み込むとレイアウトに多くの CPU パワーが必要になるため、これはあまりうまく機能しない可能性があります。通常、このようなシナリオでは、VirtualizingStackPanel を使用して子要素をレイアウトするため、ListBox または ListView を使用することをお勧めします。

于 2012-11-06T05:45:36.340 に答える