如何使TextBox填充所有可用空间而不稍后调整其内容?

时间:2017-12-19 12:37:45

标签: wpf textbox user-controls grid

我有以下startswith,其中包含Grid

TextBox

我希望<UserControl ...> <Grid> <Grid.RowDefinitions> <RowDefinition Height="30px"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="1px"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBox Grid.Column="1" Grid.RowSpan="3" AcceptsReturn="True" TextWrapping="Wrap" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> <!-- content in other cells of the Grid's first column --> </Grid> </UserControl> 填充控件上可用的所有空间(宽度和高度),并且用户应输入更多文本而不是适合它我希望其垂直滚动条变为活动状态,而不调整大小TextBox。相反的是,TextBox的大小会随着内容的变化而变化,整个网格随之增长。

我如何实现我的需要?

编辑:以下是所发生情况的说明。 Two screenshots of the same <code>UserControl</code> with different content in <code>TextBox</code>.

以上截图是内容适合TextBox的情况。下面的屏幕截图是当没有足够空间容纳所有内容时的情况 - TextBox然后调整大小以适应它,这也调整了放置它的网格,使它看起来破碎。

编辑2 :演示此行为的项目为here

2 个答案:

答案 0 :(得分:0)

TextBox不会填充Grid。您可以为Background

指定Grid来自行确认
<UserControl>
    <Grid Background="Yellow">
    ...

这是因为Grid的高度为30 px +,无论TextBox的高度是+ 1 px。要使第2行或第3行的内容填充Grid,您需要将Height中的至少一个RowDefinitions更改为*

<UserControl>
    <Grid Background="Yellow">
        <Grid.RowDefinitions>
            <RowDefinition Height="30px"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="1px"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBox Grid.Column="1" Grid.RowSpan="3" AcceptsReturn="True"
                 TextWrapping="Wrap" HorizontalScrollBarVisibility="Hidden"
                 VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch"
                 VerticalAlignment="Stretch"/>
    </Grid>
</UserControl>

答案 1 :(得分:0)

我设法通过在Border的{​​{1}}的相同单元格中添加不可见Grid,然后设置TextBox'TextBox来解决此问题。分别为Width的{​​{1}}到HeightActualWidth

ActualHeight

这导致Border保持固定<Border x:Name="b" Grid.Column="1" Grid.RowSpan="3" HorizontalAlignment="Stretch"/> <TextBox AcceptsReturn="True" TextWrapping="Wrap" Grid.Column="1" Grid.RowSpan="3" Width="{Binding ActualWidth, ElementName=b}" Height="{Binding ActualHeight, ElementName=b}" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Visible" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> ,无论其内容如何,​​但其TextBox还有另一个问题:当界面扩展时,它会增长,但没有之后收缩,因为潜在的Height。诀窍是将Width的{​​{1}}设置为ScrollViewer,而不是像以前那样设置ScrollViewer

我将示例项目的更改推送到GitHub,因此解决方案现在可用specification