11

所以我从 HTML 的角度来看 WPF。

我只想像这样TextBox在我的窗口上放一个:

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

原来TextBox是巨大的,覆盖了整个窗口。(!)

好的,这不是我想要的,但我也不想定义确切的大小,因为我知道Height并且Width应该灵活,所以我尝试:

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

一样。所以我尝试:

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

一样。所以我只是硬编码尺寸:

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

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

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

4

4 回答 4

11

你可以更进一步地举 Bryan 的例子。通过指定不拉伸的特定对齐方式并进一步约束 TextBox,使其不会扩展超过特定大小。例如:

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

您可以通过在 Grid 内设置行/列并以各种方式限制它们来进一步实现它。当您来自 HTML 背景时,可以将其想象为使用表格来控制布局。请记住,您还可以嵌套其他容器对象(即 StackPanels、WrapPanels、其他 Grids 等...)。

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

祝你好运。我现在正在经历同样的事情。

于 2009-02-02T14:48:20.537 回答
6

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

例如,您可以使用仅在一个方向上拉伸其控件的堆栈面板。

于 2009-02-02T13:57:25.490 回答
4

除了像 Stefan 提到的那样使用不同的面板之外,您还可以给 TextBox 一个非拉伸的对齐方式。例如

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/>
于 2009-02-02T14:37:25.847 回答
1

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

但是,如果您在高 DPI 模式下运行程序,TextBox 将随着 DPI(和字体)增长。

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

除此之外,您只能使用非“拉伸”的 Horizo​​ntalAlignment 和 VerticalAlignment,这会将 TextBox 的大小调整为内容 - 但是空的 TextBox 会很小。

您可以将 VerticalAlignment 设置为“Center”、“Top”或“Bottom”以获得大约一行的自动高度(可能由 MinHeight 设置支持以避免非常小的字体问题),然后设置 Width 使 TextBox 宽度不会随着用户输入而改变。

于 2009-02-02T15:38:00.950 回答