Как создать простое меню, которое работает из приложения в C # WPF - PullRequest
0 голосов
/ 08 декабря 2011

Как я могу создать небольшое меню, которое всплывает рядом с курсором в 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);
    }

EDIT2

Это часть кода. Я создал еще один диспетчер, у которого есть имя 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;
            }



        };

Ответы [ 2 ]

0 голосов
/ 10 декабря 2011

(извините за мой плохой английский)

Вот как бы я это сделал:

  • Создайте свое меню в WPF любым удобным для вас способом (это может быть реальное меню или список, кнопки на панели стека и т. Д.).
  • Установите для WindowStyle значение Нет.
  • Чтобы определить движение и положение мыши, вы можете использовать эту библиотеку
  • Напишите некоторую логику, чтобы показать / скрыть окно на позиции мыши (с таймером, чтобы определить, когда мышь не движется в течение 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;
0 голосов
/ 10 декабря 2011

У меня просто трещина, посмотри сюда,

http://www.a2zdotnet.com/View.aspx?Id=92

Если возможно, добавьте контекстное меню в главное окно, а затем сделайте так, чтобы оно выглядело программно следующим образом:

Показать меню программно в WPF

Используйте таймер, чтобы это произошло через 1 секунду.

Я не уверен, появится ли он там, где находится курсор, или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...