Как сделать растягивание ListBox WPF с TextBox внутри ScrollViewer? - PullRequest
0 голосов
/ 12 января 2019

У меня есть ListBox, который содержит один TextBox с большим количеством текста, который должен быть обернут, когда это возможно. ListBox находится внутри ScrollViewer вместе с другими элементами управления (в приведенном ниже примере это Button). Я бы хотел, чтобы ListBox растягивался горизонтально с ScrollViewer и отображал горизонтальную полосу прокрутки только тогда, когда ListBox меньше определенной ширины. Вот тот XAML, который у меня есть:

<StackPanel>
    <ScrollViewer
        VerticalScrollBarVisibility="Auto"
        HorizontalScrollBarVisibility="Auto"
        >
        <StackPanel>
            <Button Content="Test" />
            <ListBox MinWidth="500">
                <ListBoxItem>
                    <TextBox
                        Text="This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test."
                        TextWrapping="Wrap"
                        />
                </ListBoxItem>
            </ListBox>
        </StackPanel>
    </ScrollViewer>
</StackPanel>

Проблема в том, что ListBox (и, следовательно, TextBox) достигают максимальной ширины независимо от ширины ScrollViewer. Горизонтальная полоса всегда отображается (если, конечно, ширина ScrollViewer не превышает ширину ListBox). Я хочу, чтобы горизонтальная полоса отображалась только тогда, когда ListBox меньше определенного размера.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

После множества проб и ошибок и других ответов на StackOverflow я пришел к следующему решению:

<StackPanel>
    <ScrollViewer
        VerticalScrollBarVisibility="Auto"
        HorizontalScrollBarVisibility="Auto"
        >
        <StackPanel>
            <Button Content="Test" />
            <ListBox
                ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                HorizontalContentAlignment="Stretch"
                Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}}"
                MinWidth="500"
                >
                <ListBoxItem>
                    <Grid>
                        <TextBox
                            Text="This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test."
                            TextWrapping="Wrap"
                            />
                    </Grid>
                </ListBoxItem>
            </ListBox>
        </StackPanel>
    </ScrollViewer>
</StackPanel>

Единственными изменениями являются дополнительные свойства ListBox.

0 голосов
/ 12 января 2019

Я не знаю, зачем вам ListBox, я думаю, что вы можете использовать это

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Button Content="Test" />
    <TextBox Text="This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test.This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a test. This is a" 
             TextWrapping="Wrap"
             Grid.Row="1"
             VerticalScrollBarVisibility="Auto"/>
</Grid>
...