wpf实现IE菜单栏自动隐藏效果
2012-10-09 22:21
656 查看
IE菜单栏默认为隐藏状态,按下键盘Alt键后显示,菜单失去焦点则自动隐藏。下面说说WPF中如何实现这样的效果。
第一步:Menu默认设置为隐藏(Visibility="Collapsed"),这里不应该设置为"Hidden",因为菜单栏隐藏后其他控件需要自动填补菜单栏隐藏后的空缺。Visibility="Hidden"只是界面上不显示而已,Menu控件的位置还是被占用着。
第二步:响应键盘Alt键,然后显示出Menu。这里需要用到WPF中的隧道事件(PreviewXXX),从根元素开始响应,这样不论焦点在哪个控件上,都能得到KeyDown事件。例子中是在Window根节点添加PreviewKeyDown事件。
第三步:响应键盘焦点(KeyboardFocus),GotFocus则显示,LostFocus则隐藏。
第四步:由于还能通过键盘组合键的方式来打开菜单,所以还要响应ContextMenuOpening事件,不论Menu由于什么原因Opening了,菜单栏都需要为显示状态。
后台代码如下:
第一步:Menu默认设置为隐藏(Visibility="Collapsed"),这里不应该设置为"Hidden",因为菜单栏隐藏后其他控件需要自动填补菜单栏隐藏后的空缺。Visibility="Hidden"只是界面上不显示而已,Menu控件的位置还是被占用着。
第二步:响应键盘Alt键,然后显示出Menu。这里需要用到WPF中的隧道事件(PreviewXXX),从根元素开始响应,这样不论焦点在哪个控件上,都能得到KeyDown事件。例子中是在Window根节点添加PreviewKeyDown事件。
第三步:响应键盘焦点(KeyboardFocus),GotFocus则显示,LostFocus则隐藏。
第四步:由于还能通过键盘组合键的方式来打开菜单,所以还要响应ContextMenuOpening事件,不论Menu由于什么原因Opening了,菜单栏都需要为显示状态。
<Window x:Class="IEMenu.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" PreviewKeyDown="Window_PreviewKeyDown"> <DockPanel> <Menu x:Name="menu" DockPanel.Dock="Top" VerticalAlignment="Top" Visibility="Collapsed" GotKeyboardFocus="menu_GotKeyboardFocus" LostKeyboardFocus="menu_LostKeyboardFocus" ContextMenuOpening="menu_ContextMenuOpening"> <MenuItem Header="文件(_F)"> <MenuItem Header="打开(_O)..." /> <MenuItem Header="保存(_S)" /> <MenuItem Header="另存为(_A)..." /> <Separator /> <MenuItem Header="退出(_Q)" /> </MenuItem> <MenuItem Header="帮助(_H)"> <MenuItem Header="清除日志(_C)" Click="MenuItem_Click" /> <MenuItem Header="帮助(_H)" /> <Separator /> <MenuItem Header="关于(_A)" /> </MenuItem> </Menu> <Border Background="Aquamarine" BorderBrush="Black" BorderThickness="5" CornerRadius="10"> <ListBox x:Name="log" /> </Border> </DockPanel> </Window>
后台代码如下:
private void menu_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { menu.Visibility = Visibility.Visible; } private void menu_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { menu.Visibility = Visibility.Collapsed; } private void menu_ContextMenuOpening(object sender, ContextMenuEventArgs e) { menu.Visibility = Visibility.Visible; } private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { if(e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt) { if(menu.Visibility != Visibility.Visible) menu.Visibility = Visibility.Visible; } }
相关文章推荐
- wpf实现IE菜单栏自动隐藏效果
- 用WPF实现鼠标移开窗口自动隐藏
- JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
- BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
- 实现下拉列表,点击其他位置自动隐藏效果的三种方式比较
- JS实现自动固定顶部的悬浮菜单栏效果
- 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
- 利用JavaScript实现天气菜单栏在网页边角处展现和隐藏的效果
- MFC定时器实现类似QQ桌面自动隐藏效果
- JS实现自动固定顶部的悬浮菜单栏效果
- BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
- [VB.NET]请问类似QQ窗体靠边自动隐藏的效果如何实现?????
- WPF中实现类似IE7中的自动隐藏菜单
- 用WPF实现鼠标移开窗口自动隐藏
- WPF中实现类似IE7中的自动隐藏菜单
- C# 设置IE Cookie 从而实现自动打开需要登录的页面
- Android广告条效果--使用Volley实现网络图片的自动轮播(仿淘宝、网易广告页轮播效果)
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 为何firefox不支持insertRow和insertCell。我如何能让firefox显示和ie显示的效果一样?iframe实现高度自适应,兼容FF、Opera、Safari
- jquery实现隐藏在左侧的弹性弹出菜单效果