Задать вопрос
@Impeeeery
жуй. куй.

Как в WPF сделать StackPanel внутри ScrollViewer (или как иначе в ListView добавить кнопку load more внизу элементов)?

Так я делаю:
<ListView.Style>
                                                    <Style TargetType="ListView">
                                                                <Setter Property="Template">
                                                                    <Setter.Value>
                                                                        <ControlTemplate TargetType="ListView">

                                                                            <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}">
                                                                                <StackPanel>
                                                                                    <ItemsPresenter />
                                                                                    <Button Content="More" Name="moreButton"></Button>
                                                                                </StackPanel>
                                                                            </ScrollViewer>
                                                                        </ControlTemplate>
                                                                    </Setter.Value>
                                                                </Setter>
                                                    </Style>
                                                </ListView.Style>


но ScrollViewer начинает вести себя неадекватно. прокрутка не работает плавно по одному item'у, а воспринимает всю stackpanel как единое целое, проскакивая все элементы.

если вместо StackPanel будет Grid с фиксированной Height, то этого не будет.
но Grid мне не подходит, так как высота ItemsPresenter, разумеется, заранее неизвестна
  • Вопрос задан
  • 1180 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Из вопроса не ясно нужно чтобы ваша кнопка тоже скролировалась или она там фиксированно должна внизу контрола?
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
  <!-- Задаете шаблон отображения -->
  <ScrollViewer.Template>
     <ControlTemplate TargetType="{x:Type ScrollViewer}">
          <Grid>
             <ScrollContentPresenter /> <!-- Это область куда помещаются элементы, что будут скролировать -->
             <!-- Вместо этого комментария можно поместить кнопку, если не нужно, чтобы она скролировалась -->
             <ScrollBar x:Name="PART_VerticalScrollBar" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}"
                                   ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                                   HorizontalAlignment="Right" Style="{DynamicResource ResourceKey=ScrollBarStyle}" />
                    </Grid>
       </ControlTemplate>
   </ScrollViewer.Template>
   <!-- А здесь помещаете все, что должно скролироваться -->
</ScrollViewer>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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