2017-04-02 122 views
1

我無法在模板化按鈕中居中文本。 「確定」停留在底部中央或者甚至低於按鈕邊界。xaml如何在模板化按鈕中居中文本

<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> 

回答

1

卸下ViewBox,調整ButtonFontSize和設定的ContentPresenterCenterHorizontalAlignmentVerticalAlignment屬性:

<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> 

enter image description here

Ellipse具有固定大小時,將內容置於ViewBox是沒有意義的。

0

嘗試這種情況:

<Button ...> 
    <Button.Content> 
      <StackPanel Padding="0" HorizontalAlignment="Center" VerticalAlignment="Center"> 
      <TextBlock Text="OK"/> 
      </StackPanel> 
     </Button.Content> 
</Button>