【发布时间】:2011-06-09 21:19:34
【问题描述】:
我在Grids 和StackPanels 中观察到了这个问题,它可能也适用于其他面板,请考虑以下 Xamls:
<Grid MaxWidth="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Label>Title:</Label>
<TextBox Grid.Column="1" Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
和
<StackPanel MaxWidth="200">
<Label>Title:</Label>
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
(编辑:我有几个这样的变量块,这就是为什么我不设置TextBox 本身的MaxWidth)
当然我想要的是,在文本输入时,如果达到父级的 MaxWidth,TextBox 不会变大,但这不会发生,面板调整大小直到达到 MaxWidth 和 @ 987654330@射门出界。
如果第二个网格列没有定义宽度(默认为一颗星),TextBox 将不会增长,因为它只占用所有可用空间,因此文本也会像我想要的那样滚动,但这个面板是一个ToolBar,如果ToolBar 是水平的ToolBarTray,这个设置会导致即时溢出。
关于如何让 TextBox 不超出范围的任何想法?
编辑:答案(可能)在正常情况下有效,但工具栏以某种方式破坏了我的布局,一方面,无论出于何种原因和之前的内容,我的控件总是被推入工具栏溢出区域在网格单元内拉伸不再这样做。由于我最初的问题是如何防止这种内部溢出(而不是如何应对工具栏的特殊性),所以我就这样吧。
【问题讨论】:
-
我发现 StackPanel 没有给它的孩子提供任何尺寸建议,而是纯粹将孩子安排在一个堆栈中。对于这种情况,我要么使用 Grid(在下面的答案中建议使用参数),要么使用 DockPanel。
标签: wpf layout wpf-controls