Ширина текстового поля, помещаемого в столбец сетки, увеличивается при вставке длинного текста - PullRequest
0 голосов
/ 30 октября 2019

Когда я помещаю текстовое поле в столбец сетки, как показано ниже

<StackPanel>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="115"/>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="90"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="hello"/>
        <TextBox Grid.Column="1" />
        <Button Grid.Column="2" Content="push me"/>
    </Grid>
</StackPanel>

, я получаю правильный результат, то есть ширина текстового поля получается из родительской сетки

enter image description here

Но когда я набираю длинный текст, текстовое поле начинает превышать свой столбец и перестает расширяться после нескольких дополнительных букв

enter image description here

В .Net 4.6.2 я получаю тот же результат, но при переходе на .Net 4.7.2 проблема решена, т.е. ширина текстового поля не меняется. Мое программное обеспечение скомпилировано .Net 4.0, есть ли решение, чтобы решить эту проблему для более низкого .net, чем 4.7.2?

Первая идея для Павла: удалить панель стека и добавить еще одну строку сетки, все еще не работая в .net4.6.2

enter image description here

Вторая идея для Павла: сделать ширину первого столбца «Авто» вместо «1 *». Это работает, текстовое поле не расширяется (.net 4.6.2), однако я действительно хотел, чтобы первый и второй столбцы реагировали на изменение размера.

enter image description here

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете решить эту проблему, удалив StackPanel и добавив RowDefinition в сетку. Вы также можете установить TextWrapping="Wrap" для TextBox для переноса длинного текста

    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="3*"/>
            <ColumnDefinition Width="90"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <TextBlock Grid.Column="0" Text="hello" MinWidth="115"/>
        <TextBox Grid.Column="1" TextWrapping="Wrap"/>
        <Button Grid.Column="2" Content="push me"/>
    </Grid>

StackPanel y-Измерение ограничено содержанием, оно будет автоматически расширено до содержимого, более подробную информацию можно найтина обзор панелей

0 голосов
/ 30 октября 2019

Для меня это ошибка, что размер текста в Textbox может изменить ширину родительского элемента (ширину сетки). Это происходит в VS2019 .Net 4-> 4.6.2, но не в .Net 4.7.2 и после нее.

Для любого, кто сталкивается с этой проблемой, я нашел ниже обходной путь, определив невидимую сетку, которая содержит текстовые блоки. Я получаю ширину столбцов и отдаю их элементам управления, размещенным в StackPanel.

 <some container>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="1*" MinWidth="115"/>
                <ColumnDefinition  Width="3*" />
                <ColumnDefinition  MinWidth="90"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="0"/>
            </Grid.RowDefinitions>
            <TextBlock x:Name="C0" Grid.Column="0" />
            <TextBlock x:Name="C1" Grid.Column="1" Margin="5"/>
            <TextBlock x:Name="C2" Grid.Column="2" />
        </Grid>


        <StackPanel Orientation="Horizontal">
            <TextBlock Width="{Binding ElementName=C0, Path=ActualWidth }" Text="hello" />
            <TextBox Width="{Binding ElementName=C1, Path=ActualWidth }" Margin="5" />
            <Button Width="{Binding ElementName=C2, Path=ActualWidth }" Content="push me"/>
        </StackPanel>
    </some container>

Поле должно быть одинаковым для столбца в сетке и элемента управления в StackPanel (см. Второй столбец).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...