8

レイアウトに 3 列のグリッドがあり、それぞれの幅が に設定されていWidth="*"ます。中央 (2 番目) のグリッドには、それぞれ独自のテキストブロックを含む別の 3 列のグリッドがあり、列グリッドの幅は に設定されていWidth="*"ます。

ウィンドウのサイズが変更されると、グリッドは期待どおりにサイズ変更されますが、テキストがグリッドの境界の外に出た場合、3 番目のテキストブロックはトリミングされません。と でテキストボックスを設定してTextTrimming="WordEllipsis"TextWrapping="Wrap"ますが、何らかの理由でプロパティが適用されていません。

これが私が持っているコードの一部です:

レイアウト グリッド:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="150" MaxWidth="300" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition MinWidth="150" MaxWidth="500" Width="1*" />
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="2*"/>
    </Grid.ColumnDefinitions>
</Grid>

2 列目のコード:

<Grid Grid.Column="2" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="5" Width="Auto">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <TextBlock Text="{Binding Path=FeedItems.Count}" Foreground="White" FontSize="18" Width="Auto" FontWeight="SemiBold" />
    <TextBlock Text=" items from " Foreground="White" FontSize="18" Width="Auto" Grid.Column="1" />
    <TextBlock Text="{Binding Path=Name}" Foreground="White" FontSize="18" Grid.Column="2" TextTrimming="CharacterEllipsis" HorizontalAlignment="Left" Width="Auto" TextWrapping="NoWrap" ClipToBounds="True" />
</Grid>
4

1 に答える 1

11

これを機能させるには、2番目のグリッドの最後の列のサイズを*にする必要があります。そうしないとTextBlock、スペースがない場合でも、必要なだけのスペースがあることがわかります。自動サイズの列は、コンテンツをグリッドの境界に制限しません。TextBlockただし、これを1回の実行と複数の実行で実行すると、おそらくより良い結果が得られます。

<TextBlock FontSize="18" TextTrimming="CharacterEllipsis">
    <Run Text="{Binding Path=FeedItems.Count}" FontWeight="SemiBold" />
    <Run Text=" items from " />
    <Run Text="{Binding Path=Name}" />
</TextBlock>

.NET 4.0以降、Run.Textのみをバインドできることに注意してください。古いバージョンのフレームワークを使用している場合は、独自のBindableRunを作成する必要があります。これは、ここに示すように非常に単純です。

于 2010-12-09T18:10:53.700 に答える