簡體   English   中英

WPF截獲模態窗口外的點擊

[英]WPF intercept clicks outside a modal window

是否可以檢查用戶何時在模態窗口之外單擊? 我想以某種方式規避模態邏輯,因為如果窗口未顯示為模態,則它將不會顯示在活動窗口的頂部,並且目前,這是正確顯示它的唯一方法。 我還沒有找到適當的方法來做到這一點(因為將不再觸發“停用”事件。)

即使它是一個模態窗口(通過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成為應用程序的龐然大物-沒有互操作,沒有其他復雜的東西。 希望它可以幫助其他人面對這種奇怪的行為。

一種方法是在主應用程序上掛接事件處理程序,並在打開該窗口時對其進行響應:

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 
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM