我在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并且TextBox在边界之外拍摄.
如果第二个网格列没有定义宽度(默认情况下是一个星形),TextBox将不会增长,因为它只占用所有可用空间,因此文本滚动就像我想要的那样但是这个面板是ToolBar中的一个项目,如果ToolBar处于水平ToolBarTray中,此设置会导致瞬间溢出.
关于如何让TextBox不出界的任何想法?
编辑:答案(可能)在正常情况下工作,但工具栏以某种方式拧紧我的布局,一方面我的控件总是被推入ToolBar溢出区域,无论出于什么原因和内容,在拉伸到Grid-cell内部之前不再这样做.由于我最初的问题是如何防止这种内部溢出(而不是如何应对ToolBar的特性),我将把它留在那里.
最佳答案 将第二个ColumnDefinition Width更改为*,将文本框HorizontalAlignment设置为stretch,将TextWrapping设置为Wrap以获得所需的效果(请参阅下面的XAML)
<Grid x:Name="myGrid" MinWidth="200" MaxWidth="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label>Title:</Label>
<TextBox Margin="5" TextWrapping="Wrap" Grid.Column="1" Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch"/>
</Grid>
编辑:您可以创建要应用于文本框的样式,这样您就不必再为其他文本框设置相同的属性.