设置 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);
}
目标:
我正在尝试创建一个 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);
}