2010-05-24 115 views
0

我的WPF維護窗口具有帶「退出」按鈕的工具欄;一個CommandExit綁定這個按鈕。 CommandExit在退出前執行一些檢查。將命令綁定到窗口標題欄的X按鈕

現在,如果我點擊關閉窗口按鈕(標題欄的x按鈕),這個檢查將被忽略。

我怎樣才能將CommandExit綁定到窗口x按鈕?

回答

0

你要實現你的主窗口的事件「關閉」在這裏你可以做檢查,並取消關閉動作的事件處理程序。這是最簡單的方法,但是否則你必須重新設計整個窗口及其主題。

6

我想你可能想取消基於這些條件的關閉?你需要使用Closing event,它傳遞給你一個System.ComponentModel.CancelEventArgs來取消關閉。

您可以在代碼隱藏中掛接此事件並手動執行命令,或者,這將是首選方法,您可以使用附加行爲來掛鉤事件並激發命令。

東西線沿線的(我沒有測試):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows; 
using System.Windows.Interactivity; 
using System.Windows.Input; 

namespace Behaviors 
{ 
    public class WindowCloseBehavior : Behavior<Window> 
    { 
     /// <summary> 
     /// Command to be executed 
     /// </summary> 
     public static readonly DependencyProperty CommandProperty = DependencyProperty.Register("Command", typeof(ICommand), typeof(WindowCloseBehavior), new UIPropertyMetadata(null)); 

     /// <summary> 
     /// Gets or sets the command 
     /// </summary> 
     public ICommand Command 
     { 
      get 
      { 
       return (ICommand)this.GetValue(CommandProperty); 
      } 

      set 
      { 
       this.SetValue(CommandProperty, value); 
      } 
     } 

     protected override void OnAttached() 
     { 
      base.OnAttached(); 

      this.AssociatedObject.Closing += OnWindowClosing; 
     } 

     void OnWindowClosing(object sender, System.ComponentModel.CancelEventArgs e) 
     { 
      if (this.Command == null) 
       return; 

      // Depending on how you want to work it (and whether you want to show confirmation dialogs etc) you may want to just do: 
      // e.Cancel = !this.Command.CanExecute(); 
      // This will cancel the window close if the command's CanExecute returns false. 
      // 
      // Alternatively you can check it can be excuted, and let the command execution itself 
      // change e.Cancel 

      if (!this.Command.CanExecute(e)) 
       return; 

      this.Command.Execute(e); 
     } 

     protected override void OnDetaching() 
     { 
      base.OnDetaching(); 

      this.AssociatedObject.Closing -= OnWindowClosing; 
     } 

    } 
} 
相關問題