C# 在按钮上设置字体大小';s ContentPresenter更改文本的垂直对齐方式-XAML
我有一个ToggleButton自定义控件,可以在切换时更改文本和大小。我可以更改/设置字体和更改背景/前景属性,效果很好 但是,一旦我设置ContentPresenter的FontSize属性,按钮中的文本就会错位!特别是垂直位置似乎已关闭(在按钮中向下移动) 我不知道是什么原因造成的。如果我不设置fontsize,一切都会正常工作。这是我的按钮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
<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!字体大小大于高度肯定是问题之一。我仍然不明白为什么我必须做我所做的来让它对齐。请参阅更新。