首页 > 解决方案 > 网格布局和扩展控件 (TextBox)

问题描述

我似乎不了解我的应用程序中的布局行为。在下面的草图中,我有一个文本框,在输入文本时会扩展。如何防止这种情况发生并让高度保持不变并获得滚动条?右侧 TextBox 的大小应该是左侧三个 TextBox 的大小。

初始状态:

在此处输入图像描述

添加几个值后:

在此处输入图像描述

这是 XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid Grid.Row="0" Background="LightBlue">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBox Grid.Row="0" Grid.Column="0" Text="One" Margin="5" />
        <TextBox Grid.Row="1" Grid.Column="0" Text="Two" Margin="5" />
        <TextBox Grid.Row="2" Grid.Column="0" Text="Three" Margin="5" />
         <TextBox
            Grid.RowSpan="3" Grid.Column="1" Margin="5"
            AcceptsReturn="True"
            Text="Hello World!"
            VerticalScrollBarVisibility="Auto"
            />
    </Grid>
    <Rectangle Grid.Row="1" Fill="Blue" />
</Grid>

标签: wpf

解决方案


简单的答案

假设 es 的字体大小和边距TextBox保持不变,并且TextBox左边的 es 只是单行,你可以为 top 设置一个固定的高度RowDefinition

    <Grid.RowDefinitions>
        <RowDefinition Height="84" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

复杂的答案

如果左边的TextBoxes 是多行的,或者如果字体大小或边距可以改变,那么你将不得不变得更复杂一些。我认为没有现有Panel的可以处理这个问题,您必须手动设置Height右侧的TextBox以匹配ActualHeight + Margin.Top + Margin.Bottom所有左侧的总和TextBox。每当在任何 left esSizeChanged上被提出时,都需要这样做。TextBox


推荐阅读