У меня есть следующий обработчик события для NotifyIcon
внутри приложения WPF с помощью интеграции форм:NotifyIcon MouseDown MouseEventArgs нет данных о местоположении
void MyNotifyIcon_MouseDown(Object sender, System.Windows.Forms.MouseEventArgs e)
{
ShowSettingsWindow();
}
Однако e.Location = {X=0,Y=0}
всегда. Есть ли способ сделать эту работу?
Update
Как ни странно, люди проголосовали, чтобы закрыть этот вопрос и downvoted его. Однако его явно не работает и достаточно просто, чтобы создать новый файл NotifyIcon
внутри файла App.xaml.cs
приложения WPF и попробовать его для себя.
Update
Как Ганс указывал, это дизайн. Он все еще не отвечает на вопрос, какие возможные обходные пути. Кроме того, это плохой дизайн, потому что:
Это событие происходит на MouseDown, что означает, что он должен иметь некоторый контекст положения курсора мыши, когда она была нажата для того, чтобы произошло. Обработчик WmMouseDown для NotifyIcon имеет свойство
ref Message m
which other controls use to establish the correct position, однако, похоже, оно игнорирует это свойство и не использует его в обработчике событий. Я бы назвал это основной ошибкой.С момента своего вскрытия, получение
Cursor.Position
внутриMouseDown
не даст вам точного последнего местоположения, в котором MouseDown был поднят после щелчка по иконке в трее. Существует небольшая задержка между нажатием на нее, и она поднимает событие, в котором вы можете перемещать мышь. Вы можете проверить это самостоятельно с помощью приложения, которое получает координаты мыши, быстро перемещая мышь после нажатия на лоток и получая его местоположение в обработчикеMouseDown
. Обходной путь (который отвечает на мой вопрос) заключается в том, чтобы сохранить последнее местоположение на каждомMouseMove
, используя вместо этогоCursor.Position
, и используя это последнее место наMouseDown
в качестве места, которое нажало на значок. Все это указывает на явную потребность в местоположении мыши, когда произошло событие.
Видимо, я единственный, кто заботится об этих несоответствиях в .NET в то время как многие люди, кажется, терпеть их или не понимают их последствия должным образом.
Это полностью [дизайн] (http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/NotifyIcon. CS, 7942e6855936067a). –
@ HansPassant Плохой дизайн. – Alexandru
Конечно, это не так, положение мыши бессмысленно, когда значок может случайно изменить позицию в любой момент. –