在 XAML 中怎么说:默认宽度和高度,例如文本框

Posted

技术标签:

【中文标题】在 XAML 中怎么说:默认宽度和高度,例如文本框【英文标题】:In XAML how to say: default width and height for e.g. TextBox 【发布时间】:2010-10-04 22:21:36 【问题描述】:

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

我只想像这样在我的窗口上放一个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“显示正在使用的字体大小的默认大小”?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

只是一个警告点。虽然 StackPanel 仅在一个方向上拉伸子控件,除非您明确约束该子对象,否则 StackPanel 会在该方向上为这些子对象提供无限空间。使用某些控件可能会导致异常的副作用。 The Grid always streches its child controls - 这不是真的,您可以将对齐设置为 stretch 以外的其他答案中所写的内容。 @Bip901 是的,现在你可以这样做了。这个问题是 12 年前提出的,所以 Grid 发生了一些变化:)【参考方案2】:

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

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

【讨论】:

【参考方案3】:

您可以更进一步地采用 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 控件的挑战在于它们非常灵活,因此您必须掌握所有选项以及它们如何影响布局。

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

【讨论】:

【参考方案4】:

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

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

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

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

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

【讨论】:

以上是关于在 XAML 中怎么说:默认宽度和高度,例如文本框的主要内容,如果未能解决你的问题,请参考以下文章

怎么调整select框得宽度和高度

js怎么取得文本框的宽度与高度

文本框宽度可以根据文字长度自适应吗?css怎么写?

设置控件高度,宽度等

如何用css设置文本框的宽和高?

DIV的宽度和高度在外部CSS时候设置无效?