【问题标题】:Bind command to X-button of window title bar将命令绑定到窗口标题栏的 X 按钮
【发布时间】:2010-05-24 07:28:06
【问题描述】:

我的 WPF 维护窗口有一个带有“退出”按钮的工具栏; CommandExit 与此按钮绑定。 CommandExit 在退出前执行一些检查。

现在,如果我单击关闭窗口的按钮(标题栏的 x 按钮),则会忽略此检查。

如何将 CommandExit 绑定到窗口 x 按钮?

【问题讨论】:

    标签: wpf window command binding exit


    【解决方案1】:

    我假设您可能希望根据这些条件取消关闭?您需要使用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;
            }
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      您必须实现主窗口事件“关闭”的事件处理程序,您可以在其中进行检查并取消关闭操作。这是最简单的方法,但否则您必须重新设计整个窗口及其主题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-04
        • 2012-02-19
        • 2011-01-01
        • 1970-01-01
        相关资源
        最近更新 更多