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

Posted

技术标签:

【中文标题】如何将字体大小绑定到可变网格大小【英文标题】:How to bind Font Size to variable Grid Size 【发布时间】:2012-11-27 01:33:56 【问题描述】:

我有一个 2 列 2 行的网格。一个单一的字符 (Unicode U+2699) 被放置在右下角的网格区域内。它看起来像这样:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

ViewBox 可以拉伸和缩放他的孩子以填充所有可用空间...

【讨论】:

谢谢!这正是我想要的:)【参考方案2】:

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

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

这应该可行。

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

【讨论】:

我也尝试了您的解决方案,但角色并没有像使用 Blachshma 的答案那样使用行的整个高度。不管怎样,谢谢你的回答!

以上是关于如何将字体大小绑定到可变网格大小的主要内容,如果未能解决你的问题,请参考以下文章

WPF TextBlock 字体调整大小以填充网格中的可用空间

如何设置Navicat的显示字体与字体大小?

绑定键以增加/减少emacs中的字体大小

Tailwind 不应用某些字体大小类

如何更改 jqGrid 中的字体大小?

如何自动缩放一组控件的字体大小?