设置 2 行文本框

Set 2-Line text box

目标:

我正在尝试创建一个 space 的 TextBox 正好为 2 行。 稍后将内容填充到文档中,该文档最多 space 两行。

用户应该能够在应用程序中直观地看到生成文档:

现状/问题

文本框位于 <RowDefinition Height="auto"></RowDefinition> 的网格中。这导致文本框正好占据 space 的 1 行(标记为黄色):

由于MinLines="2",只有在输入第一个字母时,文本框才会扩展为两行。我确实有为 Grid.Row 设置静态高度的想法,但老实说,我真的不喜欢静态大小,我觉得这不是合适的解决方案。

此外,尽管 MaxLines="2" 文本框会愉快地环绕任意数量的行。 我已经设置了 MaxLength="200" - 它有点像工作但与实际文本大小无关。
(iiiii 与 WWWWW)

当前代码:

<Grid x:Name="EigenbelegGrid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
        <ColumnDefinition Width="auto"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"></RowDefinition>
        <RowDefinition Height="auto"></RowDefinition>
    </Grid.RowDefinitions>
    <!-- Preset -->
    <Label Content="Preset" Grid.Column="0" Grid.Row="0"></Label>
    <ComboBox x:Name="TemplateSelection_DropDown" Grid.Column="1" Grid.Row="0" IsEditable="True"
    <Button x:Name="SavePreset_Button" Content="Save" Grid.Column="2" Grid.Row="0"></Button>
    <Button x:Name="DeletePreset_Button" Content="Delete" Grid.Column="3" Grid.Row="0"></Button>
    <!-- Reasoning -->
    <Label Content="Begründung" Grid.Column="0" Grid.Row="1"></Label>
    <TextBox x:Name="Reasoning_TextBox" Grid.Column="1" Grid.Row="1" MinLines="2" MaxLines="2" TextWrapping="Wrap" MaxLength="200"></TextBox>
</Grid>

加载到visual tree后,如果TextBox为空,DesiredSize会包含一行的高度加上其他原因的高度,ExtentHeight会包含一行的高度一行。我们可以用这两个来计算我们需要的实际高度。在你的情况下,它会像

<TextBox x:Name="Reasoning_TextBox" Grid.Column="1" Grid.Row="1" MaxLines="2" TextWrapping="Wrap"
         Loaded="Reasoning_TextBox_Loaded"></TextBox>

private void Reasoning_TextBox_Loaded(object sender, RoutedEventArgs e)
{
    TextBox t = (TextBox)sender;
    t.Height = t.DesiredSize.Height + t.ExtentHeight * (t.MaxLines - 1);
}