2

2つのラベルを並べて配置しようとしています(少し間隔を空けて)。

例えば

ラベル1ラベル2

各ラベルのコンテンツは常に異なります。ほとんどの場合、ラベル2の文字数は多くなりますが、ウィンドウのサイズが変更されたときにコンテンツを拡大縮小し、ラベル1とラベル2のフォントサイズを一定に保つ必要があります。

ラベル2の内容が長すぎてもトリミングされてもかまいません。

2列のグリッドを使用して、ラベルをViewBox内に配置してみました。

<Viewbox Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
    <Label Margin="0,0,0,0" Content="{Binding Path=Suburb}"/>
</Viewbox>

これに伴う問題は、配置が正しくなく、フォントサイズが一定に保たれないことです。

これを実現するための最良のレイアウト方法は何ですか?バインディングを介してフォントサイズを同期できますか?Label2のFontSizeプロパティをLabel1のFontSizeにバインドしようとしましたが、フォントが実際にどれほど大きいか小さいかに関係なく、毎回12を返すだけなので、機能しません(実際のFontSizeは計算されていないと思います。ラベルはViewBox内にあります)。

助言がありますか?

ありがとう

4

4 に答える 4

2

次のアプローチを使用できます。

<Viewbox VerticalAlignment="Top">
  <DockPanel>
    <TextBlock Text="Second" DockPanel.Dock="Right" />
    <TextBlock Text="First" />
  </DockPanel>
</Viewbox>

Viewbox2番目のラベルは、コンテンツを任意のサイズにレンダリングしてから拡大縮小できるため、トリミングされないことに注意してください。サイズをピクセル単位で制限MaxWidthする秒を指定できます。TextBlock

の代わりに、DockPanelを使用しGridColumnDefinitions同じ効果を得ることができます。

重要なことは、それらがすべて同じであるということですViewbox(したがって、同期はしませんFontSizeが、含まれているすべてのものの視覚的なスケーリングを実行します)。

于 2012-04-25T09:03:28.060 に答える
0

「ウィンドウのサイズ変更に伴うコンテンツの拡大縮小」と「フォントサイズの一貫性」が実際に何を意味するのか100%確信はありませんが、利用可能なスペースに応じて各ラベルをトリミングしたいと思います。

TextBlockでは、以下のように使用しないのはなぜですか

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="{Binding Path=Suburb}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Margin="0,0,5,0" />
    <TextBlock Text="{Binding Path=Area}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" Grid.Column="1"/>
</Grid>
于 2012-04-25T08:34:46.290 に答える
0

次のマークアップは問題ないようです。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Viewbox>
        <Label Content="Label 1" Width="{Binding ActualWidth, ElementName=label2}"/>
    </Viewbox>
    <Viewbox Grid.Column="1">
        <Label Name="label2" Content="Label 2 Label 2 Label 2"/>
    </Viewbox>
</Grid>
于 2012-04-25T08:13:31.923 に答える
0

この質問は古いと思いますが、これを行うより正しい方法の 1 つはRunsを使用することです。

ランは、TextBlock 内のテキストのセクションです。

<TextBlock Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
    <Run Text="{Binding Suburb}" />
    <Run Text="{Binding Area}" />
</TextBlock>

TextBlock 内のすべてが空白に敏感であることに注意してください。そのため、間にスペースを入れずに 2 つの Run を連続させたい場合は、次のようにします。

<TextBlock Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">
    <Run Text="Foo" /><Run Text="bar" />
    <!-- Prints 'Foobar' -->
</TextBlock>

HTML がレンダリングされる方法に似ています。タグ間に空白がある場合、それらの要素間のページに 1 つのスペースがレンダリングされます。この規則は、XAML ページ全体ではなく、TextBlockの項目にのみ適用されます。

于 2013-04-10T14:09:36.277 に答える