如何对齐文本以使其位于Silverlight中的按钮中间?

时间:2010-03-18 05:38:41

标签: silverlight xaml

以下是我正在使用的当前代码:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="ButtonPrototype.MainPage"
    Width="640" Height="480">
    <UserControl.Resources>
        <ControlTemplate x:Key="CellTemplate" TargetType="Button">
            <Grid>
                <Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1">
                    <ContentPresenter
                      Content="{TemplateBinding Content}"  
                      HorizontalAlignment="Center"
                      VerticalAlignment="Center"/>
                </Border>
            </Grid>
        </ControlTemplate>

        <Style x:Key="CellStyle" TargetType="Button">
            <Setter Property="Template" Value="{StaticResource CellTemplate}"></Setter>
            <Setter Property="Foreground" Value="Black"></Setter>
            <Setter Property="FontSize" Value="80"></Setter>
            <Setter Property="Width" Value="100"></Setter>
            <Setter Property="Height" Value="100"></Setter>
        </Style>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="A" Style="{StaticResource CellStyle}"></Button>
    </Grid>
</UserControl>

水平对齐有效,但verticalalignment不执行任何操作。谢谢你的帮助。

2 个答案:

答案 0 :(得分:13)

问题在于,通过将字符串分配给Content的{​​{1}},Silverlight需要创建一个ContentPresenter形式来呈现字符串。它是TextBlock的位置,它不在TextBlock提供的垂直空间的中心。像这样修改按钮: -

ContentPresenter

会解决它。但是,您可能只希望能够指定一个简单的字符串Content并使其居中。在这种情况下,您可以修改模板: -

<Button Style="{StaticResource CellStyle}">
   <TextBlock Text="A" VertialAlignment="Center" />
</Button>

<Border x:Name="CellBorderBrush" BorderBrush="Black" BorderThickness="1"> <StackPanel VerticalAlignment="Center"HorizontalAlignment="Center"> <ContentPresenter Content="{TemplateBinding Content}" /> </StackPanel> </Border> 放在ContentPresenterStackPanel将获取显示其内容所需的最低高度。 ContentPresenter依次只有其内容的高度,然后它在StackPanel内居中。

如果我正在构建这个,那就是它的样子: -

Border

这是按钮的更通用方法。当风格被用于非常特定的本地目的时,当然可以使用更简单的更具描述性的模板。

答案 1 :(得分:7)

我正在使用的东西可能对你的事业有所帮助:

<Button Content="A" HorizontalContentAlignment="Center"  VerticalContentAlignment="Center"/>