WPF中实现类似IE7中的自动隐藏菜单

程序要求实现类似IE7中可以自动隐藏的菜单。
在IE7中的菜单,点击ALT键时出现,再次点击隐藏。
刚开始时考虑在程序中截获ALT键消息,然后控制菜单的Visibility属性。可是这样做以后总是和IE实现的效果不同,同时发现和按下ALT键时是UP还是Down有关系。测试组发现了很多的BUG,开发不断的打补丁来弥补,确总是达不到理想效果。
最后经过研究发现一种简单的方法。
添加Menu的GotKeyboardFocus,LostKeyboardFocus,ContextMenuOpening事件,如下代码
<Menu x:Name="MainMenu" Height="23" Grid.Row="0"  Background="White" GotKeyboardFocus ="OnGotFocus" LostKeyboardFocus="OnLostFocus" ContextMenuOpening="OnContextMenuOpening">

...............

</Menu>

然后在GotKeyboardFocus中让菜单出现,注意这里不能使用Visibility。
        private void OnGotFocus(object sender, RoutedEventArgs e)
        {
            MainMenu.Height = 23;
            //MainGrid.RowDefinitions[0].Height = new GridLength(23);
            //MainMenu.Visibility = Visibility.Visible;
        }
在LostKeyboardFocus中让菜单隐藏。
        private void OnLostFocus(object sender, RoutedEventArgs e)
        {
            MainMenu.Height = 0;
            //MainGrid.RowDefinitions[0].Height = new GridLength(0);
            //MainMenu.Visibility = Visibility.Collapsed;
        }
在OnContextMenuOpening中让菜单出现(当菜单打开时,无论什么原因都要让菜单出现)
        private void OnContextMenuOpening(object sender, ContextMenuEventArgs e)
        {
            MainMenu.Height = 23;
            //MainGrid.RowDefinitions[0].Height = new GridLength(23);
            //MainMenu.Visibility = Visibility.Visible;
        }

这样就好了,效果与IE7基本相同,能够让人满意。

你可能感兴趣的:(object,IE,测试,UP,WPF,menu)