Silverlight: трудности с ScrollViewer - PullRequest
1 голос
/ 23 октября 2010

Я делаю wp7 приложение Silverlight.У меня есть ScrollViewer, который содержит ListBox из десяти элементов.Тем не менее, это только позволяет мне прокрутить чуть-чуть.Что я могу делать не так?

<ScrollViewer>
        <ListBox x:Name="StoryListBox"/>
    </ScrollViewer>

ListBox заполнен элементами следующего типа:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Image x:Name="Thumbnail" Grid.Column="0" Width="89" HorizontalAlignment="Left" VerticalAlignment="Top" />
    <TextBlock x:Name="Headline" Grid.Column="1" Grid.Row="0" Style="{StaticResource PhoneTextAccentStyle}" TextWrapping="Wrap" HorizontalAlignment="Left" Width="299" FontSize="23.333" VerticalAlignment="Top" />
    <TextBlock x:Name="Teaser" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" HorizontalAlignment="Left" Style="{StaticResource PhoneTextSubtleStyle}"  TextWrapping="Wrap" VerticalAlignment="Top" Width="384"/>
</Grid>

Что я могу здесь делать не так?

Ответы [ 3 ]

2 голосов
/ 23 октября 2010

Я не вижу причины, по которой вам нужно было бы встроить ListBox в ScrollViewer. Если ваш ListBox имеет больше элементов, чем он отображает в видимой области, элементы ListBox должны прокручиваться самостоятельно. Если вы редактируете стиль ListBox с помощью Expression Blend, стиль будет выглядеть так -

<Style x:Key="ListBoxListStyle" TargetType="ListBox">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Template">
        <Setter.Value>     
            <ControlTemplate TargetType="ListBox">
                <ScrollViewer 
                    x:Name="ScrollViewer" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Background="{TemplateBinding Background}" 
                    Foreground="{TemplateBinding Foreground}" 
                    Padding="{TemplateBinding Padding}" >
                <ItemsPresenter/>
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Вы можете видеть ScrollViewer, встроенный в ControlTemplate объекта ListBox, он заботится о прокрутке ListBoxItems.

1 голос
/ 11 мая 2012

Он (прокрутка) работает отлично после того, как я установил высоту списка.

0 голосов
/ 27 декабря 2010

ScrollViewer может работать ТОЛЬКО, когда он меньше, чем тот, который он содержит (ширина или высота).Если вы не укажете ширину или высоту ScrollViewer, он будет растянут, чтобы соответствовать его содержимому, и в результате эффект не будет идеальным.

Так что вам нужно сделать, чтобы установить фиксированныйразмер для вашего ScrollViewer.

Кстати, как сказал indyfromoz, ListBox уже имеет ScrollViewer, так что вы можете удалить свой внешний ScrollViewer и просто установить размер ListBox.

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