private void AssociatedObject_StateChanged(object sender, EventArgs e) { if (AssociatedObject.WindowState == WindowState.Normal) { //Point screenPoint = CursorInfo.GetCursorPosition(); //Left = screenPoint.X - (AssociatedObject.Width / 2); //double diff = screenPoint.Y - SystemParameters.WorkArea.Height; //Top = screenPoint.Y - AssociatedObject.Height - diff; System.Drawing.Point dp = System.Windows.Forms.Cursor.Position; System.Windows.Point wp = new System.Windows.Point(dp.X, dp.Y); // マウス座標から論理座標に変換 PresentationSource src = PresentationSource.FromVisual(AssociatedObject); System.Windows.Media.CompositionTarget ct = src.CompositionTarget; System.Windows.Point p = ct.TransformFromDevice.Transform(wp); Left = p.X - (AssociatedObject.Width / 2); if (StaticValues.SystemSetting.IsOpenOnTaskBar) { double diff = p.Y - SystemParameters.WorkArea.Height; Top = p.Y - AssociatedObject.Height - diff; } else { if ((p.Y + AssociatedObject.Height) > SystemParameters.WorkArea.Height) { double diff = p.Y - SystemParameters.WorkArea.Height; Top = p.Y - AssociatedObject.Height - diff; } else { Top = p.Y; } } } }
private void AssociatedObject_Loaded(object sender, RoutedEventArgs e) { //AssociatedObject.WindowState = WindowState.Minimized; System.Drawing.Point dp = System.Windows.Forms.Cursor.Position; System.Windows.Point wp = new System.Windows.Point(dp.X, dp.Y); // マウス座標から論理座標に変換 PresentationSource src = PresentationSource.FromVisual(AssociatedObject); System.Windows.Media.CompositionTarget ct = src.CompositionTarget; System.Windows.Point p = ct.TransformFromDevice.Transform(wp); Left = p.X - (AssociatedObject.Width / 2); double diff = p.Y - SystemParameters.WorkArea.Height; Top = p.Y - AssociatedObject.Height - diff; }