4

2 列 2 行のグリッドがあります。1 文字 (Unicode U+2699) が右下のグリッド フィールド内に配置されました。次のようになります。

現在のグリッド

文字が配置されているグリッド フィールドに合わせてフォント サイズを自動的に調整するようにしたい (この場合は、2 番目のグリッド行の高さにバインドする必要がありますが、場合によっては、グリッドの高さまたは幅が小さい場合、これら 2 つの値の最小値にバインドする方法を知っておくとよいでしょう)。

これまでの私の実装は次のようなものです (この例では少し簡略化しています)。

<Grid>
   <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
      <RowDefinition x:Name="heightToBind" Height="40"/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="14*" />
      <ColumnDefinition Width="*" />
   </Grid.ColumnDefinitions>

   <Button FontSize="{Binding ElementName=heightToBind, Path=Height.Value, Mode=OneWay}" Content="&#x2699;" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" />
</Grid>

ここでの問題は、高さがRowDefinitions 内の固定値である場合にのみ機能することです。次の定義で動作するようにします。

<Grid.RowDefinitions>
   <RowDefinition Height="4*"/>
   <RowDefinition x:Name="heightToBind" Height="*"/>
</Grid.RowDefinitions>

おまけの質問として、キャラクターの配置が低すぎて下部が切り取られている理由にも興味があります(VerticalAlignment="Center"ボタンを試してみましたが、効果がありませんでした)。

4

2 に答える 2

5

ViewBoxボタンのコンテンツとしてa を使用してみることができます。

<Button Grid.Row="1" Grid.Column="1">
    <Button.Content>
        <Viewbox  StretchDirection="Both" HorizontalAlignment="Stretch">
            <TextBlock Text="&#x2699;" />
        </Viewbox>
    </Button.Content>
</Button>

ViewBoxは、使用可能なすべてのスペースを埋めるために、子を引き伸ばしたりスケーリングしたりできます...

于 2012-12-09T12:51:50.313 に答える
1

ActualHeightの代わりに にバインドしてみてくださいHeight:

<Button FontSize="{Binding ElementName=heightToBind, Path=ActualHeight.Value, Mode=OneWay}"
        Content="&#x2699;" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" />

これはうまくいくはずです。

オン グリッド定義は*、使用可能なスペースを高さとして使用することを意味するため、ページ レイアウトがレイアウト用に準備されたときにのみ決定されます。高さが設定されていないか変更されている場合、実際の高さがActualHeightプロパティに返されます。

于 2012-12-09T12:41:45.297 に答える