WPF 菜单栏滚动到顶部后固定的两种方法

最近项目中有这么个需求:

    菜单栏滚动到顶部后固定在顶部,专业的名词叫吸顶。。这在移动端还是比较常见的。

看看效果:

下面直接看看代码喽,代码不多:

第一种方法思路:

    写一个和菜单一模一样的菜单,放在窗口顶部隐藏,当菜单滚动到上方时,就显示出来,反之隐藏。

MainWindow1.xaml如下:

<Window x:Class="wpfcore.MainWindow1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpfcore"mc:Ignorable="d"Title="MainWindow1" Height="450" Width="800"><Grid><ScrollViewer ScrollChanged="ScrollViewer_ScrollChanged"><Grid><Grid.RowDefinitions><RowDefinition Height="200"/><RowDefinition Height="auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid Grid.Row="0" x:Name="banner"><Image Source="D:\bizhi\国漫\2-9.jpg" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="这是顶部Banner"/></Grid><StackPanel Grid.Row="1" Panel.ZIndex="100" x:Name="menu" Orientation="Horizontal" TextBlock.FontSize="18" Background="LightBlue"><TextBlock Text="首页" Margin="10"></TextBlock><TextBlock Text="编辑" Margin="10"></TextBlock><TextBlock Text="视图" Margin="10"></TextBlock><TextBlock Text="调试" Margin="10"></TextBlock><TextBlock Text="WPF UI" Margin="10"></TextBlock></StackPanel><Border Height="1000" Grid.Row="22"><Border.Background><LinearGradientBrush><GradientStop Color="Red" Offset="0"/><GradientStop Color="Green" Offset="0.5"/><GradientStop Color="Blue" Offset="1"/></LinearGradientBrush></Border.Background><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="这是顶部Banner"/></Border></Grid></ScrollViewer><StackPanel x:Name="topMenu" VerticalAlignment="Top" Visibility="Hidden" Orientation="Horizontal" TextBlock.FontSize="18" Background="LightBlue"><TextBlock Text="首页" Margin="10"></TextBlock><TextBlock Text="编辑" Margin="10"></TextBlock><TextBlock Text="视图" Margin="10"></TextBlock><TextBlock Text="调试" Margin="10"></TextBlock><TextBlock Text="WPF UI" Margin="10"></TextBlock></StackPanel></Grid>
</Window>

MainWindow1.cs代码:

using System.Windows;namespace wpfcore
{public partial class MainWindow1 : Window{public MainWindow1(){InitializeComponent();}private void ScrollViewer_ScrollChanged(object sender, System.Windows.Controls.ScrollChangedEventArgs e){if (e.VerticalOffset > banner.ActualHeight){topMenu.Visibility = Visibility.Visible;}else{topMenu.Visibility = Visibility.Hidden;}}}
}

---------------分隔线------------------

第二种方法:

    在菜单 栏内添加RenderTransform。当菜单滚动到上方时,就设置TranslateTransform.YProperty  达到 同样效果

MainWindow.xaml代码如下 :

<Window x:Class="wpfcore.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:wpfcore" xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"mc:Ignorable="d"UseLayoutRounding="True"Title="MainWindow" Width="600" Height="340"><Grid><ScrollViewer ScrollChanged="ScrollViewer_ScrollChanged"><Grid><Grid.RowDefinitions><RowDefinition Height="200"/><RowDefinition Height="auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid Grid.Row="0" x:Name="banner"><Image Source="D:\bizhi\国漫\2-9.jpg" Stretch="UniformToFill" HorizontalAlignment="Center" VerticalAlignment="Center"/><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="这是顶部Banner"/></Grid><StackPanel Grid.Row="1" Panel.ZIndex="100" x:Name="menu" Orientation="Horizontal" TextBlock.FontSize="18" Background="LightBlue"><StackPanel.RenderTransform><TranslateTransform x:Name="menuTranslate" Y="0.0"/></StackPanel.RenderTransform><TextBlock Text="首页" Margin="10"></TextBlock><TextBlock Text="编辑" Margin="10"></TextBlock><TextBlock Text="视图" Margin="10"></TextBlock><TextBlock Text="调试" Margin="10"></TextBlock><TextBlock Text="WPF UI" Margin="10"></TextBlock></StackPanel><Border Height="1000" Grid.Row="22"><Border.Background><LinearGradientBrush><GradientStop Color="Red" Offset="0"/><GradientStop Color="Green" Offset="0.5"/><GradientStop Color="Blue" Offset="1"/></LinearGradientBrush></Border.Background><TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" Foreground="White" Text="这是顶部Banner"/></Border></Grid></ScrollViewer><StackPanel x:Name="topMenu" VerticalAlignment="Top" Visibility="Hidden" Orientation="Horizontal" TextBlock.FontSize="18" Background="LightBlue"><TextBlock Text="首页" Margin="10"></TextBlock><TextBlock Text="编辑" Margin="10"></TextBlock><TextBlock Text="视图" Margin="10"></TextBlock><TextBlock Text="调试" Margin="10"></TextBlock><TextBlock Text="WPF UI" Margin="10"></TextBlock></StackPanel></Grid>
</Window>

MainWindow.cs代码:

using System.Windows;
using System.Windows.Media;namespace wpfcore
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void ScrollViewer_ScrollChanged(object sender, System.Windows.Controls.ScrollChangedEventArgs e){menuTranslate.SetValue(TranslateTransform.YProperty, e.VerticalOffset);if (e.VerticalOffset > banner.ActualHeight){menuTranslate.SetValue(TranslateTransform.YProperty, e.VerticalOffset-banner.ActualHeight);}else{menuTranslate.SetValue(TranslateTransform.YProperty, 0.0);}}}
}

你还有更好的方法吗?

欢迎加入WPF UI交流群哦,关注本公众号后,回复加群,即可获取群二维码。

如果喜欢,点个赞呗~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eeprom 数据偶尔变成ff_关于水电站冗余配置下监控系统下发调节令偶尔不动作的案例分析...

点击上方“E小水电”&#xff0c;“星标或置顶公众号”关键时刻&#xff0c;第一时间送达摘要&#xff1a;吉勒布拉克水电站冗余配置下机组PLC组网运行&#xff0c;后台监控系统下发调节令&#xff0c;调节不动作或偶尔动作现象分析。引言吉勒布拉克机组自动化控制为冗余主备双…

美国明确警告德国,3G退网5G手机不需要换号,抽烟酗酒学生不能认定为家庭经济困难,大学食堂凭运动步数打折,这就是今天的大新闻。...

今天是3月13日农历二月初七今天星期三一切都风平浪静下面是今天的大新闻美国明确警告德国放弃华为&#xff08;环球新闻&#xff09;7日&#xff0c;德国经济部长彼得•阿尔特迈尔(PeterAltmaier)明确表态&#xff0c;德国不想将华为排除在本国5G建设外。随后&#xff0c;这位部…

【bayes】贝叶斯likelihood和model

1&#xff09;Likelihood 最大似然估计提供了一种给定观察数据来评估模型参数的方法&#xff0c;即&#xff1a;“模型已定&#xff0c;参数未知”。 简单而言&#xff0c;假设我们要统计全国人口的身高&#xff0c;首先假设这个身高服从服从正态分布&#xff0c;但是该分布的均…

abb限位开关已打开drv1_广告雕刻机限位开关触发

广告雕刻机限位开关触发&#xff1f;广告雕刻机是指专门用于广告行业的设备&#xff0c;是专门为广告而研发的设备。广告雕刻机当然也可以用于其他行业&#xff0c;例如工艺品行业、家具行业、模型行业等。今天我们重点说下“广告雕刻机限位开关触发”。市面上常见的PVC字广告雕…

有趣的灵魂,从高质量的阅读开始

王小波说&#xff1a;我活在世上&#xff0c;无非想要明白些道理&#xff0c;遇见些有趣的事&#xff0c;倘能如我所愿&#xff0c;我的一生就算成功。如果不能行万里路&#xff0c;那就从阅读一篇文章开始。不积跬步&#xff0c;无以至千里。不积小流&#xff0c;无以成江海。…

面向.NET开发人员的Dapr——俯瞰Dapr

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界Dapr at 20,000 feet俯瞰DaprIn chapter 1, we discussed the appeal of distributed microservice applications. But, we also pointed out that they dramatically increase architectu…

k8s创建pod加入容器_K8S架构原理及其工作流程

K8S容器编排系统容器编排系统需要满足的条件&#xff1a;服务注册&#xff0c;服务发现负载均衡配置、存储管理健康检查自动扩缩容零宕机K8S整体架构图K8S整体架构Kubernetes采用主从分布式架构&#xff0c;包括Master(主节点)、Worker(从节点或工作节点)&#xff0c;以及客户端…

每日一笑 | 程序员的招租公告

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

无需羡慕,今后.NET开发想拿30k也可以毫不费劲!

7月将至&#xff0c;半年已逝&#xff0c;码农枯燥而简单的生活中&#xff0c;时间过得飞快&#xff01;错过金三银四的小伙伴&#xff0c;转头发现金九银十不远了。业内公认的&#xff0c;涨薪最快的方式还是跳槽&#xff01;年初跳槽季&#xff0c;腾讯、阿里、百度、京东、小…

移动计算机怎么开机密码,win7忘记开机密码解决办法

设置电脑开机密码后我们每次开启电脑都需要输入开机密码才可以进入系统桌面进行使用&#xff0c;如果没有密码的话系统是无法开启的&#xff0c;这就保证了我们电脑使用的隐私性&#xff0c;但是并不是说所有的电脑都适合设置密码&#xff0c;部分场景下的电脑设置密码的话有可…

双缓冲技术

2019独角兽企业重金招聘Python工程师标准>>> package com.gavin; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import andro…

java 8 排序_一遍记住 8 种排序算法与 Java 代码实现

☞ 程序员进阶必备资源免费送「21种技术方向&#xff01;」 ☜作者&#xff1a;KaelQ&#xff0c;www.jianshu.com/p/5e171281a3871.直接插入排序经常碰到这样一类排序问题&#xff1a;把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序&#xff0c;然后构成一个有…

中小学将逐步推广编程教育;勒索病毒攻击部分政府部门和医院;国内外药企密集调价;微软要给Win7用户推死亡通知,这就是今天的大新闻...

今天是3月14日农历二月初八今天星期四看天气预报接下来几天又是雨季大家记得出门带伞下面是今天的大新闻中小学要逐步推广编程教育&#xff08;北京日报&#xff09;13日教育部公布的《2019年教育信息化和网络安全工作要点》透露&#xff0c;今年将启动中小学生信息素养测评&am…

开源高性能RISC-V处理器“香山”问世

今日&#xff0c;“香山”开源高性能RISC-V处理器问世。据行业人士介绍&#xff0c;这是计算所牵头&#xff0c;多家企业联合开发的开源处理器核&#xff0c;源代码和所有设计文档都开源。从PPT的内容上看&#xff0c;“香山”基于Chisel语言开发&#xff0c;支持多核&#xff…

《PowerShell 3.0 Advanced Admin handbook》已于今日上市

工作之余与埃及MVP Sherif Talaat合著的全英文书籍《PowerShell 3.0 Advanced Admin handbook》于今日由Packt Publishing正式出版上市&#xff0c;本书基于PowerShell3.0版本&#xff0c;历时8个月&#xff0c;从2012年8月16日Packt Publishing发邮件找我们约稿&#xff0c;经…

计算机 运行命令,教你电脑运行命令

很多朋友在网上询问电脑运行命令怎么使用&#xff0c;小编整理了这篇关于电脑运行命令怎么使用的图文使用教程&#xff0c;赶紧前来学习一下吧&#xff01;电脑运行命令如何使用&#xff1f;是网友讨论的一大话题&#xff0c;为此&#xff0c;小编特地给大家带一种办法&#xf…

每日一笑 | 男朋友整天沉迷游戏怎么办...?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

html设置样式不继承_web前端入门到实战:css的核心原理分为优先级原则与继承原则两大部分...

css原理&#xff1a;1.优先原则>后解析的内容会覆盖之前解析的内容&#xff08;所谓解析就是读取的css样式&#xff09;2.继承原则>嵌套里面的标签拥有外部标签的某些样式&#xff0c;子元素可以继承父元素的属性1》优先原则针对选择器&#xff1a;a.同一个选择器从上往下…

开源 免费 java CMS - FreeCMS1.3-数据对象-mail

2019独角兽企业重金招聘Python工程师标准>>> 下载地址&#xff1a;http://code.google.com/p/freecms/ mail 从FreeCMS 1.2 开始支持 在使用互动信件相关标签时&#xff0c;标签会封装mail供页面调用。 属性 说明 id id unitid 收信单位id …

3dmax导出x文件插件2020_C4D与unity3D,3DMAX,AI,AE,ks之间互导

一&#xff0c;C4D与unity3D互导C4D——unity3DC4D导入unity3D遇到的各种问题1.在C4D里挤压的模型转换为可编辑对象了&#xff0c;但是导入Unity以后&#xff0c;模型的封顶没了&#xff1f;2.导入到Unity中发现在里面查看模型丢面和少模型的问题&#xff0c;而且素材也少了好多…