动态调整文本框与滚动条的大小

本文关键字:滚动条 调整 文本 动态 | 更新日期: 2023-09-27 18:14:42

是否可以有一个滚动(多行)文本框没有明确设置的高度?下面是我的示例代码片段:

<Grid Grid.Row="6"
      Grid.Column="2"
      Grid.ColumnSpan="2">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Label Grid.Row="0">Heading</Label>
    <TextBox Grid.Row="1"
             SpellCheck.IsEnabled="True"
             TextWrapping="Wrap"
             AcceptsReturn="True"
             VerticalScrollBarVisibility="Auto"></TextBox>
</Grid>

这里的问题是,TextBox将根据用户输入的行数自行调整大小,而不需要保持相同的大小并滚动。

动态调整文本框与滚动条的大小

添加VerticalAlignment="Top"

  <Grid Grid.Row="6"
  Grid.Column="2"
  Grid.ColumnSpan="2">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Label Grid.Row="0">Heading</Label>
    <TextBox 
        VerticalAlignment="Top"
        Grid.Row="1"
         SpellCheck.IsEnabled="True"
         TextWrapping="Wrap"
         AcceptsReturn="True"
         VerticalScrollBarVisibility="Auto"></TextBox>
</Grid>

这将让您开始。由于你没有明确提出你的要求,所以很难提出合适的解决方案。如果你提出更明确的要求,我可以为你做一个更好的版本。

<Window ...>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="476*"/>
            <ColumnDefinition Width="45*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="8*"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Width="{Binding Value, ElementName=HorizontalSB}" Height="{Binding Value, ElementName=VerticalSB}" Margin="30,37,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" />
        <ScrollBar x:Name="VerticalSB" Grid.Column="1" HorizontalAlignment="Center" Width="Auto" SmallChange="1" Minimum="50" Value="25" MaxHeight="250" Maximum="1000"/>
        <ScrollBar x:Name="HorizontalSB" Grid.Row="1" VerticalAlignment="Top" Width="Auto" Orientation="Horizontal" VerticalContentAlignment="Center" SmallChange="10" Maximum="1000" Minimum="20" LargeChange="10" Value="75"/>
    </Grid>
</Window>