首页 新闻 赞助 找找看

WPF 菜单控件消失问题

0
悬赏园豆:120 [已解决问题] 解决于 2013-02-22 17:43
我在使用Menu控件时发现它的SubmenuOpened(打开事件)发生的比较慢,鼠标移上去要等0.5秒左右才打开,具体看机器性能好像。
于是遍历Menu控件,给每个MenuItem添加事件,鼠标移入时立即设置MenuItem.IsSubmenuOpen = true;
这样实现了移入马上打开菜单,但是当鼠标从第三级菜单移动到第二级时,整个菜单都会被关闭。
比如我打开
1-1
  1-1-1
  1-1-2(鼠标停在这里)
1-2(鼠标从1-1-2移到这里时,整个菜单会关闭)
下面是代码,麻烦各位有闲帮忙看看,感激不尽。
View Code
    public partial class TestWindow : Window
    {
        public TestWindow()
        {
            InitializeComponent();

            eventInit(menu1.Items);
        }
        public void eventInit(ItemCollection items)
        {
            foreach (var item in items)
            {
                MenuItem menuItem = item as MenuItem;

                //给每个菜单项添加鼠标事件,鼠标移入就打开菜单
                menuItem.MouseEnter += (sendr, e) =>
                {
                    menuItem.IsSubmenuOpen = true;//不加这句就不会有问题,但是不加就达不到要的效果
                };
                //有子项就递归
                if (menuItem.HasItems)
                {
                    eventInit(menuItem.Items);
                }
            }
        }
    }
View Code
<Window x:Class="Card.TestWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="TestWindow" Height="853" Width="407" >
    <Grid>
        <Menu Height="87" HorizontalAlignment="Left"  Name="menu1" VerticalAlignment="Top" Width="200" Background="Transparent">
            <Menu.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Vertical"></StackPanel>
                </ItemsPanelTemplate>
            </Menu.ItemsPanel>
            <MenuItem Header="1" Background="Transparent" >
                <MenuItem Header="1-1" Background="Transparent">
                    <MenuItem Header="1-1-1" Background="Transparent" />
                    <MenuItem Header="1-1-2" Background="Transparent" />
                    <MenuItem Header="1-1-3" Background="Transparent" />
                    <MenuItem Header="1-1-4" Background="Transparent" />
                </MenuItem>
                <MenuItem Header="1-2" Background="Transparent">
                    <MenuItem Header="1-2-1" Background="Transparent" />
                    <MenuItem Header="1-2-2" Background="Transparent" />
                    <MenuItem Header="1-2-3" Background="Transparent" />
                    <MenuItem Header="1-2-4" Background="Transparent" />
                </MenuItem>
            </MenuItem>
        </Menu>
    </Grid>
</Window>

 

灰机_不会飞的主页 灰机_不会飞 | 初学一级 | 园豆:8
提问于:2013-02-22 10:45
< >
分享
最佳答案
0
 MouseEventHandler mouseEventHandler = (sendr, e) =>
                {
                    menuItem.IsSubmenuOpen = true;
                };
menuItem.MouseEnter += mouseEventHandler;
menuItem.MouseLeave += mouseEventHandler;
收获园豆:120
Yu | 专家六级 |园豆:12980 | 2013-02-22 13:11

算是折中的解决办法吧,打开再关闭,中间还是会闪一下

不知大侠能解释一下为何会引发Menu的关闭事件吗?

灰机_不会飞 | 园豆:8 (初学一级) | 2013-02-22 15:53

@灰机_不会飞: 我也解析不了,象这样发生关闭的,我移了十几二十下才发生一下,所以只能折中让它移开时,不触发关闭

Yu | 园豆:12980 (专家六级) | 2013-02-22 16:30

@Yu: 这么说具体是跟机器有关咯?在我这里是百分百会出现的,不过这种延迟还算可以忍受,先把这问题留着吧,谢谢你了。

灰机_不会飞 | 园豆:8 (初学一级) | 2013-02-22 17:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册