WPF - 字体大小更改时网格单元格中的中心标签
WPF - Center Label in Grid Cell when Font Size Changed
像这样将网格分成多个部分:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
</Grid>
现在创建一个标签,将单元格中的内容居中。
<Label Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
观察它似乎居中。
现在,把标签的字体改成大于12的字体,越大越好,比如24。
<Label FontSize="24" Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
看到文字不再居中了。
如何在考虑文本大小的情况下将文本居中放置在单元格中?我不想为每个确实有效的方法专门定义一个边距,但它需要反复试验并且效率不高。
我正在寻找理想的纯 WPF/XAML 解决方案,内置或自定义。虽然在我看来,此功能可能需要一个转换器和一个针对标签的自定义样式,但不幸的是,对于如此简单的事情似乎需要付出相当大的努力。
有没有简单的解决方法?
我不明白你的问题 clearly.But 我认为这是你的代码行 want.I 只是在代码中添加了一个 col span 属性。
< Label FontSize="24" Grid.Row="0" Background="AliceBlue" Grid.ColumnSpan="2" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center">< /Label>
您描述的行为是由标签中的 Padding
引起的(默认情况下不为零)。
尝试:
<Label Padding="0" FontSize="30" Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center">
注意:如果行高太小无法容纳字体大小,文本的可见部分将是上部,而不是中间部分。
我想在这种情况下,渲染器尝试将文本居中是毫无用处的。
像这样将网格分成多个部分:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
</Grid>
现在创建一个标签,将单元格中的内容居中。
<Label Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
观察它似乎居中。
现在,把标签的字体改成大于12的字体,越大越好,比如24。
<Label FontSize="24" Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center"></Label>
看到文字不再居中了。
如何在考虑文本大小的情况下将文本居中放置在单元格中?我不想为每个确实有效的方法专门定义一个边距,但它需要反复试验并且效率不高。
我正在寻找理想的纯 WPF/XAML 解决方案,内置或自定义。虽然在我看来,此功能可能需要一个转换器和一个针对标签的自定义样式,但不幸的是,对于如此简单的事情似乎需要付出相当大的努力。
有没有简单的解决方法?
我不明白你的问题 clearly.But 我认为这是你的代码行 want.I 只是在代码中添加了一个 col span 属性。
< Label FontSize="24" Grid.Row="0" Background="AliceBlue" Grid.ColumnSpan="2" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center">< /Label>
您描述的行为是由标签中的 Padding
引起的(默认情况下不为零)。
尝试:
<Label Padding="0" FontSize="30" Grid.Row="0" Grid.Column="0" Content="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center">
注意:如果行高太小无法容纳字体大小,文本的可见部分将是上部,而不是中间部分。 我想在这种情况下,渲染器尝试将文本居中是毫无用处的。