0

Windows Phone で TextBlock を使用しています。

任意の長さの文字列をバインドしています。文字列の長さが 2 行を超える場合は 2 行のみを表示し、2 行目の末尾に「...」を表示したい。

ここでは長さを使用できません。例: 「W」はより多くのスペースを占有しますが、「I」のような細い文字は 2 行目にさえ届かない可能性があります。したがって、ここでは長さを使用できません。

TextTrimming="WordEllipsis" を見たことがありますが、単語の後に省略記号が表示されます。2 行目の最後の単語が大きすぎる場合は、最後の単語が削除されます。

Textblock の行数を調べる方法を教えてください。

4

3 に答える 3

0

省略記号を設定しない別のアプローチは、値コンバーター内の別のコンテキストでテキスト (またはテキストブロックのコピー) を段階的にレンダリングし、使用可能な領域に収まる正しい幅/高さなどを見つけて、そのテキスト (または 2 のようなもの) を返すことです。 -3 文字少なく、省略記号を自分で追加します)。

私は間違いなくこのアプローチをまったくお勧めしませ。これは間違いなくこれを行うための最適な方法ではありませんが、他の答えが適切でない場合、これは単純なケースで機能するはずです。

于 2013-09-04T11:57:10.177 に答える
0

残念ながら、Windows Phone では textwrappin と texttriming の両方が同時に機能しないため、ここでは textblock をロードしたイベントを使用しています。C# では、要件を満たすために 3 つのテキスト ブロックが取得されます。

あなたのxamlで、

 <TextBlock Grid.Row="1" Text=""  Margin="20,0,0,0" VerticalAlignment="Top"  MaxHeight="60" Foreground="#F97E7F81"  FontFamily="Segoe WP"  FontSize="18" Width="430" FontWeight="Bold" Loaded="desc" />

C# では、

private void desc(オブジェクト送信者, RoutedEventArgs e) {

        TextBlock tb = (TextBlock)sender;
        TextBlock tb1=new TextBlock();
        tb1.Text = tb.Text;
        tb1.TextWrapping = TextWrapping.Wrap;
        tb1.Width = 435;
        tb1.Height = 75;
        TextBlock tb2 = new TextBlock();
        tb2.Text = tb1.Text;
        tb2.Height = 75;
        tb2.TextWrapping = TextWrapping.Wrap;
        tb2.Width = 435;
        tb.Text = tb2.Text;
        tb.TextTrimming = TextTrimming.WordEllipsis;
        tb.TextWrapping = TextWrapping.Wrap;
    }

良い1日を。

于 2013-09-04T11:49:51.127 に答える