我的WPF維護窗口具有帶「退出」按鈕的工具欄;一個CommandExit綁定這個按鈕。 CommandExit在退出前執行一些檢查。將命令綁定到窗口標題欄的X按鈕
現在,如果我點擊關閉窗口按鈕(標題欄的x按鈕),這個檢查將被忽略。
我怎樣才能將CommandExit綁定到窗口x按鈕?
我的WPF維護窗口具有帶「退出」按鈕的工具欄;一個CommandExit綁定這個按鈕。 CommandExit在退出前執行一些檢查。將命令綁定到窗口標題欄的X按鈕
現在,如果我點擊關閉窗口按鈕(標題欄的x按鈕),這個檢查將被忽略。
我怎樣才能將CommandExit綁定到窗口x按鈕?
你要實現你的主窗口的事件「關閉」在這裏你可以做檢查,並取消關閉動作的事件處理程序。這是最簡單的方法,但是否則你必須重新設計整個窗口及其主題。
我想你可能想取消基於這些條件的關閉?你需要使用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;
}
}
}