private void TrayIconOnClick(object sender, EventArgs e) { MouseEventArgs mouseArgs = (MouseEventArgs)e; if (mouseArgs.Button == MouseButtons.Left) { if (!_iconDeactivatedWithClick) { Matrix transform; using (var src = new HwndSource(new HwndSourceParameters())) { transform = src.CompositionTarget.TransformFromDevice; } var rect = _trayIcon.GetRect(); double iconMid = (rect.Left + (rect.Width / 2.0)) * transform.M11; // calculate where to put var xPadding = 0.0; (Alignment align, (double left, double top, double right, double bottom)) = TaskbarPosition.GetTaskbarPosition(); double height = bottom - top; double width = right - left; switch (align) { case Alignment.BOTTOM: // place on bottom right _mini.Top = (rect.Top * transform.M22) - _mini.Height; _mini.Left = iconMid - (_mini.Width / 2.0); break; case Alignment.LEFT: // place on bottom left _mini.Top = bottom - _mini.Height; _mini.Left = left + width + xPadding; break; case Alignment.RIGHT: // place on bottom right, but down more _mini.Top = bottom - _mini.Height; _mini.Left = right - _mini.Width - width - xPadding; break; case Alignment.TOP: // place on top right _mini.Top = (rect.Bottom * transform.M22); _mini.Left = iconMid - (_mini.Width / 2.0); break; } _mini.Show(); _mini.Activate(); } _iconDeactivatedWithClick = false; } }