xaml 如何在模板化按钮中居中放置文本
xaml how center text in a templated button
我无法将模板按钮中的文本居中。 "OK" 停留在底部中心,甚至低于按钮边框。
<Window.Resources>
<ControlTemplate x:Key="BT_Kids" TargetType="{x:Type Button}">
<Grid>
<Ellipse HorizontalAlignment="Left" Height="44.8" Stroke="Black" VerticalAlignment="Top" Width="71.2">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF4363EA" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Viewbox>
<ContentControl Margin="10" Content="{TemplateBinding Content}"/>
</Viewbox>
</Grid>
</ControlTemplate>
</Window.Resources>
<Grid Margin="0,0,0,2.4">
<Button
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="75" Margin="189.6,24.6,0,0"
Template="{DynamicResource BT_Kids}" FontSize="15">OK</Button>
</Grid>
试试这个:
<Button ...>
<Button.Content>
<StackPanel Padding="0" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="OK"/>
</StackPanel>
</Button.Content>
</Button>
删除ViewBox
,调整Button
的FontSize
并设置ContentPresenter
的HorizontalAlignment
和VerticalAlignment
属性为Center
:
<ControlTemplate x:Key="BT_Kids" TargetType="{x:Type Button}">
<Grid>
<Ellipse HorizontalAlignment="Left" Height="44.8" Stroke="Black" VerticalAlignment="Top" Width="71.2">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF4363EA" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
<Button
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="75" Margin="189.6,24.6,0,0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Template="{DynamicResource BT_Kids}" FontSize="30">OK</Button>
当 Ellipse
具有固定大小时,将内容放在 ViewBox
中是没有意义的。
我无法将模板按钮中的文本居中。 "OK" 停留在底部中心,甚至低于按钮边框。
<Window.Resources>
<ControlTemplate x:Key="BT_Kids" TargetType="{x:Type Button}">
<Grid>
<Ellipse HorizontalAlignment="Left" Height="44.8" Stroke="Black" VerticalAlignment="Top" Width="71.2">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF4363EA" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Viewbox>
<ContentControl Margin="10" Content="{TemplateBinding Content}"/>
</Viewbox>
</Grid>
</ControlTemplate>
</Window.Resources>
<Grid Margin="0,0,0,2.4">
<Button
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="75" Margin="189.6,24.6,0,0"
Template="{DynamicResource BT_Kids}" FontSize="15">OK</Button>
</Grid>
试试这个:
<Button ...>
<Button.Content>
<StackPanel Padding="0" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="OK"/>
</StackPanel>
</Button.Content>
</Button>
删除ViewBox
,调整Button
的FontSize
并设置ContentPresenter
的HorizontalAlignment
和VerticalAlignment
属性为Center
:
<ControlTemplate x:Key="BT_Kids" TargetType="{x:Type Button}">
<Grid>
<Ellipse HorizontalAlignment="Left" Height="44.8" Stroke="Black" VerticalAlignment="Top" Width="71.2">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF4363EA" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
<Button
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="75" Margin="189.6,24.6,0,0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Template="{DynamicResource BT_Kids}" FontSize="30">OK</Button>
当 Ellipse
具有固定大小时,将内容放在 ViewBox
中是没有意义的。