加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – GridView水平方向的FooterTemplate

发布时间:2020-12-15 22:09:15 所属栏目:百科 来源:网络整理
导读:我开发了Win8.1通用应用程序. 我正在使用带有WrapGrid的GridView作为ItemsPanel.垂直滚动被禁用,用户只需要水平滚动.我正在使用增量源集合作为ItemsSource,当用户滚动到GridView的末尾时,会动态添加新项目.除了一件事,一切都很好.我想使进度指示器右对齐,并
我开发了Win8.1通用应用程序.

我正在使用带有WrapGrid的GridView作为ItemsPanel.垂直滚动被禁用,用户只需要水平滚动.我正在使用增量源集合作为ItemsSource,当用户滚动到GridView的末尾时,会动态添加新项目.除了一件事,一切都很好.我想使进度指示器右对齐,并且在加载新页面时它必须变得可见.我尝试为网格视图设置页脚模板,但它是隐藏的(bc可能默认页脚添加在itemspanel下面或其他任何内容).

这是我用来为GridView定义控件模板并将Footer设置为正确的代码.

<GridView.Template>
                    <ControlTemplate TargetType="GridView">
                        <Border BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}" 
                                Background="{TemplateBinding Background}">
                            <ScrollViewer x:Name="ScrollViewer" 
                                          AutomationProperties.AccessibilityView="Raw"
                                          BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" 
                                          HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" 
                                          HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" 
                                          IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" 
                                          IsHorizontalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsHorizontalScrollChainingEnabled}" 
                                          IsVerticalScrollChainingEnabled="{TemplateBinding ScrollViewer.IsVerticalScrollChainingEnabled}" 
                                          IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" 
                                          IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" 
                                          TabNavigation="{TemplateBinding TabNavigation}" 
                                          VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" 
                                          VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" 
                                          ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
                                <StackPanel Orientation="Horizontal">
                                    <ItemsPresenter HeaderTemplate="{TemplateBinding HeaderTemplate}"
                                                    Header="{TemplateBinding Header}"
                                                    HeaderTransitions="{TemplateBinding HeaderTransitions}"
                                                    Padding="{TemplateBinding Padding}"/>
                                    <ContentControl Transitions="{TemplateBinding FooterTransitions}"
                                                    ContentTemplate="{TemplateBinding FooterTemplate}" 
                                                    Content="{TemplateBinding Footer}"/>
                                </StackPanel>
                            </ScrollViewer>
                        </Border>
                    </ControlTemplate>
                </GridView.Template>

然后我将ProgressRing设置为页脚模板.

<GridView.FooterTemplate>
                    <DataTemplate>
                        <ProgressRing VerticalAlignment="Stretch"
                                      HorizontalAlignment="Stretch"
                                      IsActive="{Binding IsBusy}"
                                      Margin="0,24"
                                      Width="50"
                                      Height="50"
                                      Foreground="{StaticResource LightGreyBorderBrush}"
                                      Style="{StaticResource ProgressRingStyle}" />
                    </DataTemplate>
                </GridView.FooterTemplate>

但是当我试图滚动时 – 事情变得疯狂. GridView总是一个接一个地调用下一页加载,但是滚动位置几乎为0(在GridView的开头).所以我得到无限页面加载.

谁能帮我这个?提前谢谢了!

编辑:我创建了一个小样本来重现.请看一下.这是link.

解决方法

支持右对齐的FooterTemplate开箱即用.只需使用ItemsWrapGrid(默认情况下在GridView中使用)而不是使用WrapGrid作为ItemsPanel.您也不需要重新定义模板.以下是您的示例中的工作代码:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <GridView x:Name="TestGridView">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid ItemHeight="100"
                          Orientation="Vertical"
                          MaximumRowsOrColumns="5" />
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Border Background="DarkSlateGray"
                        Height="100"
                        Width="100"
                        Margin="20">
                    <TextBlock Foreground="#FFFFFF"
                               Text="{Binding Number}" />
                </Border>
            </DataTemplate>
        </GridView.ItemTemplate>
        <GridView.FooterTemplate>
            <DataTemplate>
                <ProgressRing IsActive="True"
                              Margin="0,24"
                              Width="50"
                              Height="50" />
            </DataTemplate>
        </GridView.FooterTemplate>
    </GridView>
</Grid>

请注意,每次向右滚动时都会加载2页,因为GridView认为一页不够.

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读