TextBox的ExtentWidth设置不正确
本文关键字:不正确 设置 ExtentWidth TextBox | 更新日期: 2023-09-27 18:21:07
我最近遇到了一个奇怪的文本框行为。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="200"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Content="Test"/>
<TextBox Grid.Column="1" TextWrapping="Wrap" Text="testtesttesttesttesttesttesttesttesttesttest"/>
<Control Grid.Row="1" Grid.ColumnSpan="2" Width="280"/>
</Grid>
在这个示例代码中,我有一个Grid
,它有2行2列。第二列设置为固定宽度。CCD_ 2将CCD_ 3设置为CCD_。
在第二行中,我有一个固定宽度的Control
,它比通常的Grid
高。这将第二列的ActualWidth
从200增加到大约250。
TextBox
的实际宽度也增加以匹配列的新宽度。
当我现在在文本框中添加一个长字符串时,它没有使用TextBox
的全宽,而是提前换行,并在TextBox
的末尾留下大约40个像素。
我发现TextBox
具有只读ExtentWidth
属性。此属性负责包装。在我的示例中,ExtentWidth
的值约为180,这是网格列宽度减去边距和填充后的200。
我能做些什么来固定TextBox
中的包装?
编辑:这个问题不是寻找WPF网格ColumnSpan行为的解释的重复。这个问题解释了格线柱的宽度会发生什么。但它并没有回答关于TextBox的包装行为的问题。
老实说,我不理解"为什么"部分,但在有人提供有意义的解释之前,这里有一些解决办法:
- 在
TextBox
上设置显式宽度 - 在列上设置
MaxWidth
而不是Width
-
将
TextBox
的宽度绑定到同一列中另一个元素的宽度。例如:<TextBox Grid.Column="1" Width="{Binding ActualWidth, ElementName=rect}" ... /> <Rectangle Grid.Column="1" x:Name="rect"/>
请注意,如果您需要能够在运行时更改列宽并希望TextBox(和包装)随之更改,则最后一个是唯一可用的解决方法。