【问题标题】:What is default closing event in XAML?XAML 中的默认关闭事件是什么?
【发布时间】:2011-07-30 07:06:06
【问题描述】:

这是 C# WPF 应用程序。我有一个关闭应用程序的Button。窗口右上角的(x)按钮是否有默认关闭事件。

基本上我希望有一个像下面这样的纯 XAML 解决方案:

<Button CloseWhenClick></Button>

而不是这个:

<Button Click="CloseWindow_Click"></Button>

private void Close(object sender, RoutedEventArgs e)
{
    Window.Close();
}

[编辑 - 答案]

我在寻找什么:

<Button Command="Close"></Button>

【问题讨论】:

  • Pure XAML 解决方案的任何具体原因?

标签: c# wpf


【解决方案1】:

没有像“默认”关闭事件这样的概念,但在 WPF 中有一个命令概念。将您的中继命令绑定到该按钮,您就完成了。这是问答链接:WPF Standard Commands - Where's Exit?

希望这会有所帮助。

问候。

【讨论】:

    【解决方案2】:

    试试这个

        public App()
        {
            Exit += new ExitEventHandler(App_Exit);
        }
    
        void App_Exit(object sender, ExitEventArgs e)
        {
            // TODO : are you sure ?!!
        }
    

    希望有帮助

    【讨论】:

    • @S.Aamani:正如问题所述,我正在寻找 XAML 解决方案的可能性
    【解决方案3】:

    实际上并没有那么复杂(但是,M$ 仍然因为不提供它而糟透了)。给你:

    public static class MyCommands
    {
        private static readonly ICommand appCloseCmd = new ApplicationCloseCommand();
        public static ICommand ApplicationCloseCommand
        {
            get { return appCloseCmd; }
        }
    }
    
    //===================================================================================================
    public class ApplicationCloseCommand : ICommand
    {
        public event EventHandler CanExecuteChanged
        {
            // You may not need a body here at all...
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
    
        public bool CanExecute(object parameter)
        {
            return Application.Current != null && Application.Current.MainWindow != null;
        }
    
        public void Execute(object parameter)
        {
            Application.Current.MainWindow.Close();
        }
    }
    

    甚至可能不需要AplicationCloseCommand.CanExecuteChanged 事件处理程序的主体。

    你这样使用它:

    <MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/>
    

    干杯!

    (你无法想象我自己花了多长时间才发现这个命令的东西......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 2017-01-24
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多