[英]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.