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的ExtentWidth设置不正确

老实说,我不理解"为什么"部分,但在有人提供有意义的解释之前,这里有一些解决办法:

  • TextBox上设置显式宽度
  • 在列上设置MaxWidth而不是Width
  • TextBox的宽度绑定到同一列中另一个元素的宽度。例如:

    <TextBox Grid.Column="1" Width="{Binding ActualWidth, ElementName=rect}" ... /> <Rectangle Grid.Column="1" x:Name="rect"/>

请注意,如果您需要能够在运行时更改列宽并希望TextBox(和包装)随之更改,则最后一个是唯一可用的解决方法。