C# 在按钮上设置字体大小';s ContentPresenter更改文本的垂直对齐方式-XAML

C# 在按钮上设置字体大小';s ContentPresenter更改文本的垂直对齐方式-XAML,c#,wpf,xaml,wpf-controls,togglebutton,C#,Wpf,Xaml,Wpf Controls,Togglebutton,我有一个ToggleButton自定义控件,可以在切换时更改文本和大小。我可以更改/设置字体和更改背景/前景属性,效果很好 但是,一旦我设置ContentPresenter的FontSize属性,按钮中的文本就会错位!特别是垂直位置似乎已关闭(在按钮中向下移动) 我不知道是什么原因造成的。如果我不设置fontsize,一切都会正常工作。这是我的按钮 <Style x:Key="PlusSelectedToggleButton" TargetType="{x:Type ToggleButto

我有一个ToggleButton自定义控件,可以在切换时更改文本和大小。我可以更改/设置字体和更改背景/前景属性,效果很好

但是,一旦我设置ContentPresenter的FontSize属性,按钮中的文本就会错位!特别是垂直位置似乎已关闭(在按钮中向下移动)

我不知道是什么原因造成的。如果我不设置fontsize,一切都会正常工作。这是我的按钮

<Style x:Key="PlusSelectedToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{x:Null}">
    <Setter Property="Background" Value="#FF3498DB" />
    <Setter Property="BorderBrush" Value="DarkGray" />
    <Setter Property="Padding" Value="1"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">           
                <Border x:Name="Border" Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" CornerRadius="4">
                    <ContentPresenter x:Name="ContentPresenter" RecognizesAccessKey="True"
                                         VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"

                                          />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter Property="Background" Value="Black" TargetName="Border" />
                        <Setter Property="BorderBrush" Value="White" TargetName="Border" />
                        <Setter Property="Foreground" Value="Black" />
                        <Setter Property="TextBlock.Foreground" Value="Black" TargetName="ContentPresenter" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="true">
                        <Setter Property="Foreground" Value="White" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="True">
                        <Setter Property="Content" Value="Selected" />
                        <Setter Property="Background" Value="Transparent" />
                        <Setter Property="TextBlock.Foreground" Value="DarkGray" TargetName="ContentPresenter" />
                        <Setter Property="BorderBrush" Value="Transparent" />
                        <Setter Property="Width" Value="75" TargetName="Border" />
                        <Setter Property="Height" Value="40" TargetName="Border" />
                    </Trigger>
                    <Trigger Property="IsChecked" Value="False">
                        <Setter Property="Content" Value="+"/>
                        <Setter Property="TextBlock.FontSize" Value="50" TargetName="ContentPresenter"/>
                        <Setter Property="VerticalContentAlignment" Value="Center" />
                        <Setter Property="Background" Value="#FF3498DB" />
                        <Setter Property="Width" Value="40"/>
                        <Setter Property="Height" Value="40"/>
                        <Setter Property="TextBlock.Foreground" Value="White" TargetName="ContentPresenter" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

更新:我让它工作了,但我仍然不完全理解为什么我必须这样做

   <Trigger Property="IsChecked" Value="False">
           <Setter Property="Content" Value="+"/>
           <Setter Property="TextBlock.Foreground" Value="White" TargetName="ContentPresenter" />
           <Setter Property="TextBlock.FontSize" Value="27" TargetName="ContentPresenter"/>
           <Setter Property="TextBlock.FontWeight" Value="Thin"></Setter>
           <Setter Property="TextBlock.Height" Value="40" TargetName="ContentPresenter"/>
           <Setter Property="VerticalContentAlignment" Value="Center"/>
           <Setter Property="Background" Value="#FF3498DB" />
           <Setter Property="Width" Value="35"/>
           <Setter Property="Height" Value="35"/>                            
</Trigger>


我必须将TextBlock.Height属性设置为更大的值(甚至比按钮高度还要大),以使文本垂直居中。在水平方向上,它保持在同一位置。我不知道它为什么会这样。

您正在设置FontSize 50,Height为40,ContentAlignment为Center。很明显,它将退出ContentPresenter。增加高度或减小字体大小。谢谢@ethicalogics!字体大小大于高度肯定是问题之一。我仍然不明白为什么我必须做我所做的来让它对齐。请参阅更新。