以下是我正在使用的当前代码:
<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不执行任何操作。谢谢你的帮助。
答案 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>
放在ContentPresenter
中StackPanel
将获取显示其内容所需的最低高度。 ContentPresenter
依次只有其内容的高度,然后它在StackPanel
内居中。
如果我正在构建这个,那就是它的样子: -
Border
这是按钮的更通用方法。当风格被用于非常特定的本地目的时,当然可以使用更简单的更具描述性的模板。
答案 1 :(得分:7)
我正在使用的东西可能对你的事业有所帮助:
<Button Content="A" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>