1

Windowsフォームウィンドウアプリケーションがあります。アプリケーション内で、マウスの位置に相対的な位置にある WPF ウィンドウを開きたいと考えています。ウィンドウの中心がマウス座標で表示される場合や、ウィンドウの左上隅がマウス座標として設定される場合があります。

http://www.formatexception.com/2008/09/wpf-and-mouseposition/のような投稿を見てきましたが 、ウィンドウの前に WPF コントロールを開いていないため、これは役に立ちません。私はWindowsフォームしか持っていないので、私の場合、次の行は使用できません

Point mousePoint = Mouse.GetPosition(this);  
4

2 に答える 2

1

利用可能なwinformsコントロールがあるので、使用できますControl.MousePosition

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseposition.aspx


winformsフォームからwpfウィンドウを表示していますか? ボタン付きのフォームを持つ簡単なテストを作成しました。ボタンをクリックすると、カーソル位置に wpf ウィンドウが開きました。これは正常に機能し、ボタンをクリックする前に WPF コントロールを作成または表示しませんでした。

設定の有無にかかわらずWindowStartupLocation試してみましたが、どちらも機能しましたが、追加してみる価値があるかもしれません。次に例を示します。

private void button1_Click(object sender, EventArgs e)
{
  Window w = new Window();
  w.WindowStartupLocation = WindowStartupLocation.Manual;
  w.Left = Control.MousePosition.X;
  w.Top = Control.MousePosition.Y;
  w.Show();
}

ただし、上記のコード サンプルがうまくいかない場合は、シナリオをもう少し詳しく説明し、いくつかのコード例を含めることができますか?

于 2012-11-20T18:48:40.830 に答える
0

Bill Tarbell の回答に基づいて、DPI スケーリングを考慮する必要がある場合があります。

    private Point GetScalingFactor(Window window)
    {
        var zeroPoint = window.PointToScreen(new Point(0, 0));
        var hundredPoint = window.PointToScreen(new Point(100, 100));
        return new Point( 
                    100.0 / (hundredPoint.X - zeroPoint.X), 
                    100.0 / (hundredPoint.Y - zeroPoint.Y));
    }

    private void ShowAtCursor(Window parent, Window toShow)
    {
        var point = parent.PointToScreen(System.Windows.Input.Mouse.GetPosition(parent));
        var scaling = GetScalingFactor(parent);

        toShow.Left = point.X * scaling.X;
        toShow.Top = point.Y * scaling.Y;
        toShow.WindowStartupLocation = WindowStartupLocation.Manual;
        toShow.Show();
    }
于 2017-06-01T19:23:38.467 に答える