0

左ボタンを押したままマウスをウィンドウからすばやくドラッグすると、 の代わりに が返されます。 Mouse.DirectlyOverSystem.Windows.Controls.Gridnull

Window.IsMouseOver戻り値true

new Rect(window.RenderSize).Contains(Mouse.GetPosition(window))戻り値true

それを再現するにMainWindow()は、次のように空の wpf プロジェクトにチェック タイマーを追加するだけです。

    public MainWindow()
    {
        InitializeComponent();
        var timer = new System.Threading.Timer(state =>
            Dispatcher.BeginInvoke(new Action(
                () => Debug.WriteLine("Mouse.DirectlyOver = {0}", Mouse.DirectlyOver)
                )),null,0,10);
    }

ゆっくりとドラッグすると、値は正しくなります。

そのための回避策はありますか?マウスがアプリケーションの外にあることを確認する正確な方法は何ですか?

4

1 に答える 1

0

回避策を見つけました。ティックごとに、WinAPIでマウスの位置を取得します

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 internal static extern bool GetCursorPos(ref Win32Point pt);

そして、ウィンドウの境界内で手動でチェックインします。

于 2012-12-03T13:52:21.080 に答える