我有一个WPF页面,上面有一些数据输入TextBoxes,它们看起来比字体需要的大得多。是什么决定了文本框的高度?有没有办法挤压他们?
文本框根据显示的字体大小变得越来越小(所以如果我能帮助它,我不想直接设置高度属性。
这是我的意思的一个例子......
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="LabelStyle" TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</Page.Resources>
<StackPanel>
<WrapPanel>
<Label Style="{StaticResource LabelStyle}" Content="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
<TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding ActualHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
</WrapPanel>
<WrapPanel>
<Label Style="{StaticResource LabelStyle}" Content="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>
<TextBox Style="{StaticResource TextBoxStyle}" Text="{Binding ActualHeight, RelativeSource={RelativeSource Self}, Mode=OneWay}"/>
</WrapPanel>
</StackPanel>
</Page>
如果查看尺寸,您会看到标签比文本框略大。将文本框上的VerticalAlignment更改为Top可使其大小相同。作为临时措施,我只需在标签上设置一个边距为-2。
答案 0 :(得分:13)
我的猜测是你的TextBox
容器导致它太大了。
在Kaxaml中尝试以下XAML:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBox Text="Sample text" FontSize="2" />
</Grid>
</Page>
这会在页面中心呈现一个非常小的文本框。如果您从容器中删除VerticalAlignment="Center"
和HorizontalAlignment="Center"
,则文本框非常大。
Grid
和TextBox
的默认水平和垂直对齐方式为Stretch
,这基本上意味着该元素不关心并将采用它给出的内容。因此,布局引擎会询问TextBox
它应该有多大并且没有得到答案,因此布局会询问Grid
。 Grid
也不关心,所以最后它会询问具有固定大小的Page
/ Window
,然后将此大小传播到可视树下(采用任何边距和填充)一路考虑)。最终结果是TextBox
填满了整个区域。
要证明这一点,请将对齐属性从Grid
移动到TextBox
本身。虽然如果你为Grid设置背景颜色,你看不到视觉上的差异。
<Grid Background="Red">
<TextBox VerticalAlignment="Center" HorizontalAlignment="Center"
Text="Sample text" FontSize="2" />
</Grid>
如果您想将文本框的边框直接填入文本,您还可以在文本框中设置Padding="0"
。
有关WPF布局系统的更多信息,请参阅this article。