ScrollViewer не работает внутри DockPanel

#wpf

#wpf

Вопрос:

У меня есть пример кода, поведение которого показано на рисунке ниже.

 <DockPanel LastChildFill="False" >
    <ScrollViewer DockPanel.Dock="Top">
        <ItemsControl>
            <Label Content ="First" BorderBrush="Violet" BorderThickness="2"/>
            <Label Content ="Second" BorderBrush="Black" BorderThickness="2"/>
            <Label Content ="Third" BorderBrush="Yellow" BorderThickness="2" />
            <Label Content ="Fourth" BorderBrush="Green" BorderThickness="2"/>
            <Label Content ="Fifth" BorderBrush="Maroon" BorderThickness="2"/>
        </ItemsControl>
    </ScrollViewer>
    <Button Height="50" DockPanel.Dock="Top">button</Button>
</DockPanel>
  

введите описание изображения здесь

Проблема здесь в том, что кнопка обрезается при изменении размера, и только тогда ScrollViewer активируется. Как я могу предотвратить обрезку кнопок и изменить размер ScrollViewer вместо этого, когда недостаточно места?

Ответ №1:

Измените порядок дочерних элементов DockPanel и установите LastChildFill значение True для заполнения ScrollViewer. Закрепите кнопку Bottom и установите для Dockpanel VerticalAlignment значение Top .

 <DockPanel LastChildFill="True" VerticalAlignment="Top">
    <Button Height="50" DockPanel.Dock="Bottom">button</Button>
    <ScrollViewer>
        <ItemsControl>
            <Label Content ="First" BorderBrush="Violet" BorderThickness="2"/>
            <Label Content ="Second" BorderBrush="Black" BorderThickness="2"/>
            <Label Content ="Third" BorderBrush="Yellow" BorderThickness="2"/>
            <Label Content ="Fourth" BorderBrush="Green" BorderThickness="2"/>
            <Label Content ="Fifth" BorderBrush="Maroon" BorderThickness="2"/>
        </ItemsControl>
    </ScrollViewer>
</DockPanel>