C# 如何在C WPF中创建一个简单的应用程序菜单

C# 如何在C WPF中创建一个简单的应用程序菜单,c#,wpf,menu,C#,Wpf,Menu,如何创建一个小菜单,在WPF中用C在光标旁边弹出。这个菜单将在应用程序窗口之外工作。比如, 我移动光标并将其停在桌面上。当它停止时,光标旁边会显示一个小菜单 谢谢 守则: static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); public void TimerEventProcessor(Object myObject, EventArgs myEventArgs) {

如何创建一个小菜单,在WPF中用C在光标旁边弹出。这个菜单将在应用程序窗口之外工作。比如,

我移动光标并将其停在桌面上。当它停止时,光标旁边会显示一个小菜单

谢谢

守则:

    static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();

    public void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
    {
        big.Visibility = Visibility.Hidden;
        myTimer.Stop();              
    }

    public void TimerEventProcessor2(Object myObject, EventArgs myEventArgs)
    {
        big.Visibility = Visibility.Visible;
        myTimer.Stop();
    }

    public MainWindow()
    {
        InitializeComponent();
        // Sets the timer interval to 5 seconds.
        myTimer.Interval = 5000;
        myTimer.Start();
        myTimer.Tick += new EventHandler(TimerEventProcessor);

        myTimer.Start(); 
        myTimer.Tick += new EventHandler(TimerEventProcessor2);
    }
编辑2

这是代码的一部分。我创建了另一个Dispatcher,其名称为hidingtimer。我将时间定义为代码上显示的3秒。这个计时器调用deneme_Tick,然后我在代码中执行与HideWindow相同的操作

        timer.Interval = new TimeSpan(0, 0, 0, 1);
        timer.Tick += (sd, args) =>
        {
            movingCount++;

            if (movingCount >= menuShowDelay)
            {
                this.Visibility = System.Windows.Visibility.Visible;
                mouse.Enabled = false;
                timer.Stop();
                this.Left = mouseLeft;
                this.Top = mouseTop;
                this.Topmost = true;

                hidingtimer.Interval = new TimeSpan(0, 0, 0, 3);
                hidingtimer.Start();
                hidingtimer.Tick += new EventHandler(deneme_Tick);

                movingCount = 0;
            }



        };

我来试试看这里

如果可能的话,在主窗口中添加一个上下文菜单,然后按如下方式编程显示

使用计时器使其在1秒后发生


我不确定它是否会出现在光标所在的位置。

对不起,我的英语不好

我会这样做:

用WPF创建你想要的菜单,可以是真正的菜单或列表框,堆栈面板上的按钮,等等。 将WindowsStyle设置为“无”。 要检测鼠标移动和位置,可以使用 编写一些逻辑来显示/隐藏鼠标位置上的窗口,并使用计时器来检测鼠标在X秒内没有移动 如果您需要有关如何完成这些步骤的更多详细信息,请告诉我:

编辑1

您可以使用该库检测鼠标移动,如下所示:

mouse = new MouseKeyboardActivityMonitor.MouseHookListener(new GlobalHooker());
mouse.MouseMove += (sd, args) =>
        {
            movingCount = 0;
            mouseLeft = args.X; //set the window.left to mouseLeft before showing it
            mouseTop = args.Y; //set the window.top to mouseTop before showing it
        };

mouse.Enabled = true;

是否要从应用程序中拖动某些内容并将其粘贴到桌面上?否则,请澄清您的要求。移动光标并单击其他位置将使控件位于焦点下方,因此您要问什么以及为什么要这样做并不完全清楚。当我运行应用程序并在应用程序启动1秒后,我希望在光标附近显示一个菜单。无论光标在桌面上什么位置,都会出现此菜单。这就是我想要的。谢谢。编辑2的一个问题是行hidingtimer.Tick+=neweventhandlerdeneme\u Tick;-这样,您就可以在每次timer.Tick发生时添加事件处理程序。因此,当hidingtimer.Tick发生时,它将执行n次。更简单的方法是使用相同的计时器并创建另一个变量来控制何时显示窗口——我在github上更新项目来实现这一点:这是一个非常好的解决方案。再次感谢。所以,你说如果我想使用另一个定时任务,我会使用同一个定时器,用不同的变量。我会考虑这个,谢谢。因为我将不得不在这个项目中使用许多计时器。这是其中之一。这帮了大忙。在我的想法中,我试图将隐藏窗口部分与鼠标移动联系起来。例如我们移动光标并停止。然后菜单打开。我们没有移动鼠标,菜单被隐藏了。在下一个移动发生并停止之前,它不会再次打开。否则,如果游标是稳定的,它将每隔3秒弹出一次。在这种情况下,只使用一个计时器更容易,但您可以使用任意多的计时器来完成其他任务。。。但是,当您同时运行多个计时器时,很容易使事情变得复杂。若要在没有移动的情况下不再显示菜单,您可以比较mouseLeft和mouseTop变量自上次以来是否没有更改…除最后一步外,所有事情都正常。。。这是我做不到的问题。如何显示和隐藏窗口?主窗口是否有显示和隐藏命令?当然,您可以将窗口的可见性属性设置为“隐藏”或“折叠”以隐藏该窗口。我得到了此命令并已执行…但此命令不会在当前位置隐藏和显示窗口吗?如何说ok,出现在这个特定的位置。您是否使用我建议的库来检测鼠标移动?如果是,在mouseMove事件中,您可以获取光标X和Y位置并将其保存到变量中,因此在显示窗口之前,您可以设置左侧,并且在我解决计时问题后,我将尝试此设置:请您看看这个。我哪里做错了?这个主窗口名称在代码中很重要。所以我想让它显示5秒。把它藏起来5秒钟。这将继续这样下去。但是当我运行代码时,我会显示它5秒钟。但我躲起来,马上就出现了。我的问题是代码。但是这个想法只是在应用程序窗口中起作用。我试着用鼠标右键点击,它只是在应用程序窗口中点击。我需要在应用程序窗口外做…你知道吗?