3

ユーザーがモーダルウィンドウの外側をクリックしたことを確認することはできますか?ウィンドウが様相論理として表示されていない場合、アクティブなウィンドウの上に表示されないため、どういうわけか様相論理を回避したいと思います。今のところ、これが正しく表示する唯一の方法です。それを行う適切な方法が見つかりませんでした(「非アクティブ化」イベントがトリガーされなくなるため)。

4

2 に答える 2

14

モーダル ウィンドウ (ShowDialog()呼び出しで表示される) であっても、ウィンドウのクラスに偶数ハンドラーを追加して、次のようにウィンドウの外側でマウス クリックをチェックすることができます。

    private void Window_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (posX < 0 || posX > this.Width || posY < 0 || posY > this.Height)
            this.Close();            
    }

    private void Window_MouseMove(object sender, MouseEventArgs e)
    {
        Point p = e.GetPosition(this);

        posX = p.X; // private double posX is a class member
        posY = p.Y; // private double posY is a class member
    }

    private void Window_Activated(object sender, EventArgs e)
    {
        System.Windows.Input.Mouse.Capture(this, System.Windows.Input.CaptureMode.SubTree);
    }

これは、困難な状況で、私にとってはうまくいきました。MFC の混合、アプリの WindowsForms マンモス - 相互運用性なし、その他の複雑なものはありません。この奇妙な行動に直面している他の人に役立つことを願っています.

于 2012-04-24T15:56:02.970 に答える
2

1 つの方法は、メイン アプリにイベント ハンドラーを接続し、そのウィンドウが開いているときにそれに応答することです。

EventManager.RegisterClassHandler(typeof(Window), Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);

また

  EventManager.RegisterClassHandler(typeof(yourAppClassName),   Mouse.PreviewMouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);

//this is just a sample..
private void OnMousepDown(object sender, MouseButtonEventArgs e)
    {
        if (thatWindowThatYourTalkingAbout.IsOpen) 
            ..do something 
    }
于 2012-04-24T15:42:46.813 に答える