自动隐藏菜单 (WPF)

发布于 2024-10-07 06:36:42 字数 55 浏览 0 评论 0原文

是否有一个简单的属性可以使菜单类在设定的秒数后自动隐藏?我搜索了 MSDN,但找不到合适的属性。

Is there a simple property that enables the menu class to autohide after a set number of seconds? I've searched MSDN but am unable to find a suitable property.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆で 2024-10-14 06:36:42

默认情况下,菜单不支持此行为,但通过少量修改,您可以轻松实现此行为。

例如:

public class AutoHideMenuItem : MenuItem
{
    DispatcherTimer timer;

    private Int32 _autoHideDelay;
    public Int32 AutoHideDelay
    {
        get
        {
            return _autoHideDelay;
        }
        set
        {
            _autoHideDelay = value;
            timer.Interval = TimeSpan.FromSeconds(AutoHideDelay);
        }
    }

    public AutoHideMenuItem()
    {
        MouseMove += new MouseEventHandler(AutoHideMenuItem_MouseMove);
        ContextMenuOpening += new ContextMenuEventHandler(AutoHideMenuItem_ContextMenuOpening);
        SubmenuClosed += new RoutedEventHandler(AutoHideMenuItem_SubmenuClosed);

        timer = new DispatcherTimer(DispatcherPriority.Normal, Dispatcher);
        timer.Interval = TimeSpan.FromSeconds(AutoHideDelay);
        timer.Stop();

        timer.Tick += new EventHandler(timer_Tick);
    }

    void timer_Tick(object sender, EventArgs e)
    {
        if (IsSubmenuOpen && !IsMouseOver)
        {
            IsSubmenuOpen = false;
        }
    }

    void AutoHideMenuItem_MouseMove(object sender, MouseEventArgs e)
    {
        timer.Stop();
        timer.Start();
    }

    void AutoHideMenuItem_ContextMenuOpening(object sender, ContextMenuEventArgs e)
    {
        timer.Start();
    }

    void AutoHideMenuItem_SubmenuClosed(object sender, RoutedEventArgs e)
    {
        timer.Stop();
    }
}

可以这样使用:

            <local:AutoHideMenuItem Header="File" AutoHideDelay="3">
                <MenuItem Header="New"></MenuItem>
                <MenuItem Header="Open"></MenuItem>
                <MenuItem Header="Close"></MenuItem>
                <MenuItem Header="Exit"></MenuItem>
            </local:AutoHideMenuItem>

3 秒后将关闭此菜单。当然,它的代码很粗糙,您需要对其进行更改以适合您的场景。

By default Menus don't support this, but by little modifications, you can easily implement this behavior.

For example:

public class AutoHideMenuItem : MenuItem
{
    DispatcherTimer timer;

    private Int32 _autoHideDelay;
    public Int32 AutoHideDelay
    {
        get
        {
            return _autoHideDelay;
        }
        set
        {
            _autoHideDelay = value;
            timer.Interval = TimeSpan.FromSeconds(AutoHideDelay);
        }
    }

    public AutoHideMenuItem()
    {
        MouseMove += new MouseEventHandler(AutoHideMenuItem_MouseMove);
        ContextMenuOpening += new ContextMenuEventHandler(AutoHideMenuItem_ContextMenuOpening);
        SubmenuClosed += new RoutedEventHandler(AutoHideMenuItem_SubmenuClosed);

        timer = new DispatcherTimer(DispatcherPriority.Normal, Dispatcher);
        timer.Interval = TimeSpan.FromSeconds(AutoHideDelay);
        timer.Stop();

        timer.Tick += new EventHandler(timer_Tick);
    }

    void timer_Tick(object sender, EventArgs e)
    {
        if (IsSubmenuOpen && !IsMouseOver)
        {
            IsSubmenuOpen = false;
        }
    }

    void AutoHideMenuItem_MouseMove(object sender, MouseEventArgs e)
    {
        timer.Stop();
        timer.Start();
    }

    void AutoHideMenuItem_ContextMenuOpening(object sender, ContextMenuEventArgs e)
    {
        timer.Start();
    }

    void AutoHideMenuItem_SubmenuClosed(object sender, RoutedEventArgs e)
    {
        timer.Stop();
    }
}

Can be used like:

            <local:AutoHideMenuItem Header="File" AutoHideDelay="3">
                <MenuItem Header="New"></MenuItem>
                <MenuItem Header="Open"></MenuItem>
                <MenuItem Header="Close"></MenuItem>
                <MenuItem Header="Exit"></MenuItem>
            </local:AutoHideMenuItem>

Which will close this menu after 3 seconds. Of course its rough code and you will need to make changes to it to suit your scenario.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文