【问题标题】: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" 按钮但没有效果)。

【问题讨论】:

    标签: wpf grid font-size


    【解决方案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 的答案那样使用行的整个高度。不管怎样,谢谢你的回答!
    猜你喜欢
    • 2017-10-06
    • 2021-09-10
    • 2016-05-25
    • 2014-07-05
    • 2014-11-15
    • 1970-01-01
    • 2017-08-12
    • 2023-01-03
    • 2011-06-15
    相关资源
    最近更新 更多