如何将字体大小绑定到变量网格大小

时间:2012-12-09 12:29:23

标签: wpf grid font-size

我有一个包含2列和2行的网格。单个字符(Unicode U + 2699)放在右下角的网格字段中。它看起来像这样:

Grid currently

我希望角色自动调整其字体大小以适应它所放置的网格字段(在这种情况下,它应该绑定到第二个网格行的高度,但因为在某些情况下它可能是不清楚网格的高度或宽度是否较小,知道如何绑定到这两个值中的最低值也是很好的。)

到目前为止,我的实现类似于以下内容(我在本例中对其进行了简化):

<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"按钮但没有效果)。

2 个答案:

答案 0 :(得分:5)

您可以尝试使用ViewBox作为按钮的内容:

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

ViewBox可伸展和伸展他的孩子以填补所有可用空间......

答案 1 :(得分:1)

您可以尝试绑定ActualHeight而不是Height

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

这应该有用。

网格定义上的*表示将可用空间作为高度,因此仅在为布局准备页面布局时确定。如果未设置或更改高度,则在ActualHeight属性中返回实际高度。