Как я могу заставить мой ScrollViewer прокручивать область просмотра?

У меня есть Grid внутри ScrollViewer внутри Border внутри StackPanel внутри Window .

ScrollViewer помещает полосу прокрутки справа, но ее нельзя прокручивать.

Как заставить ScrollViewer сделать его содержимое прокручиваемым?

http://www.deviantsart.com/upload/1bl34e1.png

<Window x:Class="TestScroll234343.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="150" Width="300">
    <StackPanel>
    <!--<StackPanel Height="150"> doesn't work either-->
        <Border>
            <ScrollViewer>            
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <TextBlock Grid.Row="0" Grid.Column="0" Text="Row0"/>
                    <TextBlock Grid.Row="1" Grid.Column="0" Text="Row1"/>
                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Row2"/>
                    <TextBlock Grid.Row="3" Grid.Column="0" Text="Row3"/>
                    <TextBlock Grid.Row="4" Grid.Column="0" Text="Row4"/>
                    <TextBlock Grid.Row="5" Grid.Column="0" Text="Row5"/>
                    <TextBlock Grid.Row="6" Grid.Column="0" Text="Row6"/>
                    <TextBlock Grid.Row="7" Grid.Column="0" Text="Row7"/>
                    <TextBlock Grid.Row="8" Grid.Column="0" Text="Row8"/>
                    <TextBlock Grid.Row="9" Grid.Column="0" Text="Row9"/>
                </Grid>
            </ScrollViewer>
        </Border>

    </StackPanel>
</Window>

person Edward Tanguay    schedule 03.12.2009    source источник


Ответы (1)


Вы должны установить высоту ScrollViewer.

Если вы этого не сделаете, Border спросит ScrollViewer, какой высоты он хочет, а ScrollViewer спросит Border, какой высоты он должен быть.

Другие варианты:

  • Поменяйте StackPanel на DockPanel (не больше Window)
  • Установите высоту StackPanel и привяжите к ней в ScrollViewer

Код:

 <StackPanel Height="140">
    <Border>
        <ScrollViewer Height="{Binding RelativeSource={RelativeSource FindAncestor, 
                    AncestorType={x:Type StackPanel}}, Path=Height}">
person Eduardo Molteni    schedule 03.12.2009
comment
Он работает, если я устанавливаю высоту ScrollViewer или Border, но не StackPanel или Window. Есть ли способ сказать ScrollViewer, чтобы он стал высотой элемента управления, в котором он находится? - person Edward Tanguay; 03.12.2009
comment
+1, но еще заметил одну проблему. В моем случае я окружаю ScrollView ListBox, теперь прокрутка мыши может прокручиваться только вдоль полосы прокрутки, а не внутри ListBox. Guess ListBox не имеет отношения к ScrollView. Как разрешить прокрутку содержимого? (В моем первоначальном дизайне я не указывал ScrollViewer) - person HoKy22; 30.07.2015