2009-02-02 87 views
9

所以我从HTML的角度来看WPF。在XAML中如何说:默认的宽度和高度,例如TextBox

我只想把一个TextBox我的窗口是这样的:

<Grid> 
    <TextBox Name="theName" /> 
</Grid> 

原来,TextBox是那么巨大,覆盖了整个窗口。

好吧,那不是我想要的,但我不想定义确切大小要么因为我知道HeightWidth应该是灵活的,所以我尝试(!):

<TextBox Name="theName" Width="Auto" Height="Auto"/> 

同样的事情。所以我尝试:

<TextBox Name="theName" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"/> 

同样的事情。所以我只是硬编码大小:

<TextBox Name="theName" Width="100" Height="20"/> 

我知道是不是在一个WPF良好的编程习惯。

那么,你如何告诉TextBox“显示正在使用的字体大小的默认大小”?

回答

9

你可以把布莱恩的例子做得更深一点。通过指定不拉伸的特定对齐并进一步限制TextBox,以便它不会扩展超过特定大小。例如:

<Grid x:Name="LayoutRoot"> 
     <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" 
     MinWidth="15" MinHeight="20" MaxWidth="500" MaxHeight="50"/> 
</Grid> 

您可以通过在网格中设置行/列并将其限制在各种方式中来进一步实现。当你来自HTML背景时,可以考虑使用表来控制布局。请记住,您也可以嵌套其他容器对象(即StackPanels,WrapPanels,其他网格等)。

XAML和WPF/Silverlight控件的挑战在于它们非常灵活,所以您必须掌握所有选项以及它们如何影响布局。

好运。我现在正在经历这个完全相同的事情。

6

使用不同的容器。 网格始终拉伸其子控件以填充网格单元格。

您可以使用例如只在一个方向上延伸其控制的堆叠面板。

+0

只是一个警告点。虽然StackPanel只向一个方向延伸子控件,除非您明确约束该子对象,那么StackPanel将为那些子对象提供该方向上的无限空间。某些控制可能导致不寻常的副作用。 – 2009-02-02 14:54:33

3

除了使用与Stefan提到的不同面板之外,您可以仅给TextBox一个不是Stretch的对齐方式。例如

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
2

WPF中的尺寸不是像素,它们是1/96英寸的“设备无关像素” - 因此在今天正常的DPI设置中,它们将1:1映射到像素。

但是,如果以高DPI模式运行程序,TextBox将随DPI(和字体)一起增长。

因此设置一个硬编码的大小并不是那么糟糕。

除此之外,您只能使用不是“拉伸”的Horizo​​ntalAlignment和VerticalAlignment,这会将文本框的大小设置为内容 - 但随后空白的文本框将变得很小。

您可以将VerticalAlignment设置为“中心”,“顶部”或“底部”以获得大约一行的自动高度(可能通过MinHeight设置进行备份以避免真正的小字体出现问题),然后设置宽度TextBox宽度不会随着用户输入内容而改变。

相关问题