让子控件宽度大小适合并限制其最大值

Posted

技术标签:

【中文标题】让子控件宽度大小适合并限制其最大值【英文标题】:Letting a child control width size to fit and limiting its max value 【发布时间】:2011-12-20 16:51:24 【问题描述】:

编辑:我尝试改写我的问题,如果不清楚,抱歉。总之谢谢大家。

假设我有一个用户控件,它的布局有一个 1 行 x 3 列的网格,前 2 个自动调整大小,第三个是星形大小:

<Grid>
<Grid.RowDefinitions>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <ComboBox MinWidth="80" MaxWidth="150" .../>
    <CheckBox Grid.Column="1" VerticalAlignment="Top".../>
    <TextBox Grid.Column="2" MaxHeight="400" TextWrapping="Wrap" HorizontalAlignment="Stretch"...>
</Grid>

TextBox 有文本换行,其垂直滚动条可见性设置为自动,水平滚动条隐藏。

现在,我有一些窗口,其中包含一个 ListBox,其项目是此 UserControl 的实例,例如:

<ListBox HorizontalContentAlignment="Stretch".../>

ListBox 位于 1 列星型网格中,因此会拉伸以适应其容器中的所有可用宽度。当我调整此 ListBox 的容器大小时,ListBox 也会按预期调整大小,因为它在星形网格列中拉伸; ListBox 项目也是如此,它们也被拉伸,在这种情况下恰好是具有上述布局的 UserControl 的实例(网格中的 3 列,第 3 星大小)。

问题在于,当我在其中输入一些长文本时,用作列表框项的 UserControl 的第 3 列中的 TextBox 不应该自动增加它的宽度:它应该只是换行,增加它的高度(达到最大高度; 然后会出现垂直滚动条)。换句话说,它的 MaxWidth 应该由可用空间决定,就像它的 Width 一样。

我应该如何为此编写我的 XAML?

【问题讨论】:

使用 ListBox 发布 XAML。如果它在网格中,如何期望用鼠标调整 ListBox 的大小? 对不起,我可能没有清楚地解释自己。 ListBox 仅将其 ItemsSource 设置为 UserControl 的可观察集合,例如。 TextBox Horizo​​ntalAlignment 是 Stretch,因此它可以工作。问题是,每当我输入冗长的文本时,它都会不断扩大它的宽度:我应该根据可用空间限制它的 MaxWidth,以便它换行而不是扩大。至于鼠标调整大小,我的意思是调整主窗口的大小,其中包括网格,其中包括(在其星形大小的列中)拉伸的 TextBox.Thx! 而且您还没有发布 ListBox 的 XAML。 抱歉 :),XAML 在我的评论中:就是这样,一个具有水平内容对齐 = 拉伸的 ListBox。 "现在,我有一些窗口,包括一个列表框。"显示 XAML。显示 1 列星型网格。如果您在调整大小时遇到​​问题,则需要发布整个 XAML。 【参考方案1】:

根据您发布的代码,这应该是默认行为。

尝试设置您的 TextBox 的 HorizontalAlignment="Stretch"

【讨论】:

以上是关于让子控件宽度大小适合并限制其最大值的主要内容,如果未能解决你的问题,请参考以下文章

UIImageView 适合自调整大小的 tableview 单元格中的最大宽度

如何限制 chrome 中的最大 textarea 宽度和高度或如何禁用 textarea 调整大小

弹出框的最大尺寸

如何正确设置 GtkLabel 的最大宽度?

CSS 和图像大小

将 html 输入框限制为其周围边框的最大宽度