我正在尝试在 WPF 中创建自定义文本框模板。
我的文本框周围有一个 1px 边框,这个边框的边距为 8px,这都是简单的东西,这里没有问题。
我遇到的问题是,当我使用 TextBox 并定义时:
<TextBox Template="MyTextBoxTemplate" Height="100">
边框的实际输出高度只有 84px,我猜是因为当我设置高度时,还包括顶部和底部边距 (2 x 8px) 16px - 但我说 TextBox 应该是 100px 高,这就是我的想要输出。
我尝试在模板中根据
{TemplateBinding Height}
设置边框的高度,但随后边框的底部被修剪:
这是我一直在使用的基本代码,我有一些更详细的代码,但我已经回到基础知识来尝试解决这个尺寸问题:
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<ContentControl Margin="8">
<Border Background="White"
BorderBrush="red"
BorderThickness="1"
CornerRadius="2"
Height="{TemplateBinding Height}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Label Content="Text Area..." />
</Border>
</ContentControl>
</ControlTemplate>
我之前没有使用内容控件,这只是我尝试解决此问题的最新容器。
ControlTemplate 的顶级元素上不应有任何(固定)边距。边距应在文本框上定义,例如默认样式:
<Style TargetType="TextBox">
<Setter Property="Margin" Value="8"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer x:Name="PART_ContentHost"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>