wpf - 网格布局和扩展控件 (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>
解决方案
简单的答案
假设 es 的字体大小和边距TextBox
保持不变,并且TextBox
左边的 es 只是单行,你可以为 top 设置一个固定的高度RowDefinition
:
<Grid.RowDefinitions>
<RowDefinition Height="84" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
复杂的答案
如果左边的TextBox
es 是多行的,或者如果字体大小或边距可以改变,那么你将不得不变得更复杂一些。我认为没有现有Panel
的可以处理这个问题,您必须手动设置Height
右侧的TextBox
以匹配ActualHeight + Margin.Top + Margin.Bottom
所有左侧的总和TextBox
。每当在任何 left esSizeChanged
上被提出时,都需要这样做。TextBox
推荐阅读
- webpack - 如何将 AJV 库捆绑到 Webpack?
- java - 从 Hashmap 中返回数据提供者类型 Object[]
> - firebase - 如何正确地进行树抖动以减少包大小并为每个云功能单独入口点
- kentico - Kentico 11:多文化设置,但需要在文化之外创建 URL
- python - 将动画 Matplotlib 图表保存为 GIF
- console - 在 Unified Service Desk 中打开控制台应用程序
- reactjs - graphql:运行时意外调用。要么未设置 Babel 转换,要么未能识别此调用站点
- excel - 如何从 Excel 365 中的代码自定义功能区?
- sql - 如何使用数组在表中插入多行
- version-control - Accurev 更改密码问题并出现错误:用户当前已登录