uwp - 上滑隐藏导航栏下滑显示

简介: 原文:uwp - 上滑隐藏导航栏下滑显示  好久没写博客了,因为忙着工作。昨天周末填坑需要做一个上滑列表数据时隐藏导航栏下滑时显示的效果,下面分享一下我的做法,希望能给你带来帮助。   思路是通过判断滚动条是往下还是往上滑然后做出相应的显示隐藏导航栏处理即可; 首先在我们的内容外套一个ScrollViewer,然后在ScrollViewer的事件ViewChanged中做判断。
原文: uwp - 上滑隐藏导航栏下滑显示

 

好久没写博客了,因为忙着工作。昨天周末填坑需要做一个上滑列表数据时隐藏导航栏下滑时显示的效果,下面分享一下我的做法,希望能给你带来帮助。

 

思路是通过判断滚动条是往下还是往上滑然后做出相应的显示隐藏导航栏处理即可;

首先在我们的内容外套一个ScrollViewer,然后在ScrollViewer的事件ViewChanged中做判断。

我们新 建一个page,布局出列表(包含模拟测试用的数据)、导航栏,代码如下:

  1   <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
  2         <ScrollViewer x:Name="sv" ViewChanged="sv_ViewChanged">
  3             <!--模拟数据-->
  4             <StackPanel>
  5                 <Grid Height="50" Margin="0,10,0,0" >
  6                     <Grid.Background>
  7                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  8                             <LinearGradientBrush.RelativeTransform>
  9                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 10                             </LinearGradientBrush.RelativeTransform>
 11                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 12                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 13                         </LinearGradientBrush>
 14                     </Grid.Background>
 15                     <TextBlock Text="模拟数据1" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 16                 </Grid>
 17                 <Grid Height="50" Margin="0,10,0,0" >
 18                     <Grid.Background>
 19                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 20                             <LinearGradientBrush.RelativeTransform>
 21                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 22                             </LinearGradientBrush.RelativeTransform>
 23                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 24                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 25                         </LinearGradientBrush>
 26                     </Grid.Background>
 27                     <TextBlock Text="模拟数据2" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 28                 </Grid>
 29                 <Grid Height="50" Margin="0,10,0,0" >
 30                     <Grid.Background>
 31                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 32                             <LinearGradientBrush.RelativeTransform>
 33                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 34                             </LinearGradientBrush.RelativeTransform>
 35                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 36                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 37                         </LinearGradientBrush>
 38                     </Grid.Background>
 39                     <TextBlock Text="模拟数据3" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 40                 </Grid>
 41                 <Grid Height="50" Margin="0,10,0,0" >
 42                     <Grid.Background>
 43                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 44                             <LinearGradientBrush.RelativeTransform>
 45                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 46                             </LinearGradientBrush.RelativeTransform>
 47                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 48                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 49                         </LinearGradientBrush>
 50                     </Grid.Background>
 51                     <TextBlock Text="模拟数据4" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 52                 </Grid>
 53                 <Grid Height="50" Margin="0,10,0,0" >
 54                     <Grid.Background>
 55                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 56                             <LinearGradientBrush.RelativeTransform>
 57                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 58                             </LinearGradientBrush.RelativeTransform>
 59                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 60                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 61                         </LinearGradientBrush>
 62                     </Grid.Background>
 63                     <TextBlock Text="模拟数据5" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 64                 </Grid>
 65                 <Grid Height="50" Margin="0,10,0,0" >
 66                     <Grid.Background>
 67                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 68                             <LinearGradientBrush.RelativeTransform>
 69                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 70                             </LinearGradientBrush.RelativeTransform>
 71                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 72                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 73                         </LinearGradientBrush>
 74                     </Grid.Background>
 75                     <TextBlock Text="模拟数据6" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 76                 </Grid>
 77                 <Grid Height="50" Margin="0,10,0,0" >
 78                     <Grid.Background>
 79                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 80                             <LinearGradientBrush.RelativeTransform>
 81                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 82                             </LinearGradientBrush.RelativeTransform>
 83                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 84                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 85                         </LinearGradientBrush>
 86                     </Grid.Background>
 87                     <TextBlock Text="模拟数据7" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
 88                 </Grid>
 89                 <Grid Height="50" Margin="0,10,0,0" >
 90                     <Grid.Background>
 91                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
 92                             <LinearGradientBrush.RelativeTransform>
 93                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
 94                             </LinearGradientBrush.RelativeTransform>
 95                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
 96                             <GradientStop Color="#FFF7AFED" Offset="1"/>
 97                         </LinearGradientBrush>
 98                     </Grid.Background>
 99                     <TextBlock Text="模拟数据8" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
100                 </Grid>
101                 <Grid Height="50" Margin="0,10,0,0" >
102                     <Grid.Background>
103                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
104                             <LinearGradientBrush.RelativeTransform>
105                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
106                             </LinearGradientBrush.RelativeTransform>
107                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
108                             <GradientStop Color="#FFF7AFED" Offset="1"/>
109                         </LinearGradientBrush>
110                     </Grid.Background>
111                     <TextBlock Text="模拟数据9" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
112                 </Grid>
113                 <Grid Height="50" Margin="0,10,0,0" >
114                     <Grid.Background>
115                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
116                             <LinearGradientBrush.RelativeTransform>
117                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
118                             </LinearGradientBrush.RelativeTransform>
119                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
120                             <GradientStop Color="#FFF7AFED" Offset="1"/>
121                         </LinearGradientBrush>
122                     </Grid.Background>
123                     <TextBlock Text="模拟数据10" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
124                 </Grid>
125                 <Grid Height="50" Margin="0,10,0,0" >
126                     <Grid.Background>
127                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
128                             <LinearGradientBrush.RelativeTransform>
129                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
130                             </LinearGradientBrush.RelativeTransform>
131                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
132                             <GradientStop Color="#FFF7AFED" Offset="1"/>
133                         </LinearGradientBrush>
134                     </Grid.Background>
135                     <TextBlock Text="模拟数据11" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
136                 </Grid>
137                 <Grid Height="50" Margin="0,10,0,0" >
138                     <Grid.Background>
139                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
140                             <LinearGradientBrush.RelativeTransform>
141                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
142                             </LinearGradientBrush.RelativeTransform>
143                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
144                             <GradientStop Color="#FFF7AFED" Offset="1"/>
145                         </LinearGradientBrush>
146                     </Grid.Background>
147                     <TextBlock Text="模拟数据12" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
148                 </Grid>
149                 <Grid Height="50" Margin="0,10,0,0" >
150                     <Grid.Background>
151                         <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
152                             <LinearGradientBrush.RelativeTransform>
153                                 <CompositeTransform CenterY="0.5" CenterX="0.5" Rotation="-90"/>
154                             </LinearGradientBrush.RelativeTransform>
155                             <GradientStop Color="#FF3FBBD6" Offset="0"/>
156                             <GradientStop Color="#FFF7AFED" Offset="1"/>
157                         </LinearGradientBrush>
158                     </Grid.Background>
159                     <TextBlock Text="模拟数据13" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
160                 </Grid>
161             </StackPanel>
162         </ScrollViewer>
163 
164 
165 
166         <!--导航栏-->
167         <Grid x:Name="bar" Height="50" Background="#FFB05AEC" VerticalAlignment="Bottom" Canvas.ZIndex="2" Opacity="0.9">
168             <TextBlock Text="导航栏" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"></TextBlock>
169         </Grid>
170     </Grid>
MainPage.xaml

以上代码的效果是这样的:

然后转到mainpage的后台,代码如下:

 1  //滚动条位置变量
 2         double scrlocation = 0;
 3         //导航栏当前显示状态(这个是为了减少不必要的开销,因为我做的是动画隐藏显示效果如果不用一个变量来记录当前导航栏状态的会重复执行隐藏或显示)
 4         bool isshowbmbar = true;
 5         public MainPage()
 6         {
 7             this.InitializeComponent();
 8             
 9         }
10 
11         private void sv_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
12         {
13             if (sv.VerticalOffset != scrlocation)
14             {
15                 if (sv.VerticalOffset > scrlocation)
16                 {
17                     //滚动条当前位置大于存储的变量值时代表往下滑,隐藏底部栏
18                     //隐藏
19                     if (isshowbmbar)
20                     {
21                         //这里为了简洁易懂就不做动画隐藏效果,直接用透明度进行隐藏。
22                         bar.Opacity = 0;
23                         isshowbmbar = false;
24                         
25                     }
26                 }
27                 else
28                 {
29                     //显示
30                     if (isshowbmbar == false)
31                     {
32                         bar.Opacity = 1;
33                         isshowbmbar = true;
34                        
35                     }
36 
37                 }
38 
39             }
40             scrlocation = sv.VerticalOffset;
41         }
mainpage.xaml.cs

代码中也写了非常详细的注释了,这里在简单说几句,我用一个变量scrlocation来记录滚动停止后的滚动条所在位置,然后在列表滚动时也就是viewchanged事件发生时获取滚动条的位置,只要判断viewchanged事件发生时获取滚动条的位置是大于scrlocation还是小于就可以知道用户是往上滑还是往下滑了。这里还有一个变量isshowbmbar是记录当前导航栏的显示状态,因为滑动列表的时候viewchanged事件会不停地触发,如果不用这个变量记录并且判断的话会导致导航栏不停地显示或隐藏,如果你只是单纯用透明度来隐藏或显示的话性能影响上来说不算太大,但是如果你像我用动画来做隐藏显示效果的话会加大这个开销或者出现动画显示不正常的情况。

以上代码运行起来的效果如下(没有动画效果看起来不是很好看,懒得写懒啊大家自己加上就和我第一张效果图一样了。):

希望我的思路能给你带来帮助,谢谢。如果写得不好见谅。

我把这个demo传上来,大家可以自己运行。(in vs2017rc .net4.6)

【上滑隐藏显示demo.zip点击下载】

目录
相关文章
|
11月前
|
小程序 前端开发 容器
微信小程序隐藏右侧滚动条并可以滚动
微信小程序隐藏右侧滚动条并可以滚动
457 0
|
C# 编解码
WPF C# 多屏情况下,实现窗体显示到指定的屏幕内
原文:WPF C# 多屏情况下,实现窗体显示到指定的屏幕内 针对于一个程序,需要在两个显示屏上显示不同的窗体,(亦或N个显示屏N个窗体),可以使用如下的方式实现。
4938 0
|
11月前
仿百度地图上拉下滑抽屉盒
仿百度地图上拉下滑抽屉盒
30 0
|
移动开发
移动端开发H5页面点击按钮后出现闪烁或黑色背景的解决办法
移动端开发H5页面点击按钮后出现闪烁或黑色背景的解决办法
|
开发框架 iOS开发
手机软键盘弹起导致页面变形的一种解决方案
手机软键盘弹起导致页面变形的一种解决方案
439 0
|
iOS开发
iOS开发- 点击通知栏回到顶部的动画效果
iOS开发- 点击通知栏回到顶部的动画效果
137 0
iOS开发- 点击通知栏回到顶部的动画效果
滚动条案例(点击跳转到指定地点,上下滑动跟随显示标题)
滚动条案例(点击跳转到指定地点,上下滑动跟随显示标题)
|
前端开发 JavaScript
利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
220 0
利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
最近也换了公司,也换了新的工作,工资也象征性的涨了一点点,但是最近心里还是慌慌,不知道为什么,没有那种踏实感,感觉自己随时可以被抛弃的感觉。感觉自己在荒废时间,也感觉自己在浪费生命。
295 0
Qt-网易云音乐界面实现-1 窗口隐藏拖拽移动,自定义标题栏
直播带货系统,滚动视图,上滑隐藏,下滑显示
直播带货系统,滚动视图,上滑隐藏,下滑显示
263 0