【问题标题】:In XAML how to say: default width and height for e.g. TextBox在 XAML 中怎么说:默认宽度和高度,例如文本框
【发布时间】: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“显示正在使用的字体大小的默认大小”?

【问题讨论】:

    标签: wpf xaml textbox font-size autosize


    【解决方案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宽度不会随着用户输入而改变。

        【讨论】:

          猜你喜欢
          • 2011-12-22
          • 2011-08-17
          • 1970-01-01
          • 1970-01-01
          • 2013-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-23
          相关资源
          最近更新 更多