TextBox, расширяющийся с окружением Сетки, но не с текстом

Окно имеет Сетку с двумя столбцами. Левый столбец содержит управление с постоянной шириной, но с высотой, которая адаптируется. Правый столбец содержит TextBox, который занимает все остающееся место в Сетке (и таким образом в Окне).

Сетке дают минимальную ширину и высоту и переносят в ScrollViewer. Если пользователь изменяет размер окна, чтобы быть меньшим, чем минимальная ширина/высота Сетки, полосы прокрутки отображены.

Это точно, как я хочу, чтобы это было. Однако проблема происходит, когда пользователь начинает вводить текст. Если текст долго для помещений в одну строку в TextBox, я хочу, чтобы текст перенесся. Поэтому я установил TextWrapping="Wrap" на TextBox. Но так как TextBox имеет автоматическую ширину и перенесен в ScrollViewer (на самом деле целая Сетка, которая перенесена), TextBox просто продолжает расширяться направо.

Я действительно хочу, чтобы TextBox расширился, если окно расширено, но я не хочу, чтобы TextBox расширился текстом. Скорее текст должен перенестись в доступном TextBox. Если текст не соответствует в высоте TextBox, полоса прокрутки должна быть отображена в TextBox.

Существует ли способ выполнить это?

Ниже некоторый код, который показывает мою проблему:

<Window x:Class="AdaptingTextBoxes.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="300" Width="400" Background="DarkCyan">
<Grid Margin="10" Name="LayoutRoot">
    <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Grid MinWidth="300" MinHeight="200">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <Button Grid.Column="0" Margin="0,0,10,0" Content="Button" Width="100" />

            <TextBox Grid.Column="1" AcceptsReturn="True" TextWrapping="Wrap" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" />
        </Grid>
    </ScrollViewer>
</Grid>
</Window>
11
задан double-beep 18 April 2019 в 18:46
поделиться

2 ответа

Вы можете использовать невидимую рамку (это хитроумно, но работает - это то, как я стараюсь сортировать размеры динамических текстовых полей):

<Border BorderThickness="0" x:Name="border" Grid.Column="1" Margin="0.5" />
                <TextBox Grid.Column="1" AcceptsReturn="True" TextWrapping="Wrap" Width="{Binding ActualWidth, ElementName=border}" Height="{Binding ActualHeight, ElementName=border}" />
15
ответ дан 3 December 2019 в 07:11
поделиться

Вы пробовали установить свойство MaxWidth только для TextBox?

Отредактируйте после комментария OP

Я бы попытался получить избавиться от ScrollViewer . Размер, используемый в макете Grid , должен учитывать изменение размера, а настройки полосы прокрутки в TextBox должны позаботиться обо всем остальном.

1
ответ дан 3 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: