如何将字体大小绑定到可变网格大小
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="⚙" 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="⚙" />
</Viewbox>
</Button.Content>
</Button>
ViewBox 可以拉伸和缩放他的孩子以填充所有可用空间...
【讨论】:
谢谢!这正是我想要的:)【参考方案2】:您可以尝试绑定到ActualHeight
而不是Height
:
<Button FontSize="Binding ElementName=heightToBind, Path=ActualHeight.Value, Mode=OneWay"
Content="⚙" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Right" />
这应该可行。
网格定义上的*
表示将可用空间作为高度,因此只有在页面布局准备好布局时才确定。如果高度未设置或更改,则在 ActualHeight
属性中返回实际高度。
【讨论】:
我也尝试了您的解决方案,但角色并没有像使用 Blachshma 的答案那样使用行的整个高度。不管怎样,谢谢你的回答!以上是关于如何将字体大小绑定到可变网格大小的主要内容,如果未能解决你的问题,请参考以下文章