我应该使用ApplicationCommands.Close
来关闭模态对话框,还是这个命令被认为是关闭应用程序的保留命令?如果是后者,那么人们会为每个Dialog
框创建Close
命令,还是只为所有模态对话框创建一个Close
命令?
我应该使用ApplicationCommands.Close
来关闭模态对话框,还是这个命令被认为是关闭应用程序的保留命令?如果是后者,那么人们会为每个Dialog
框创建Close
命令,还是只为所有模态对话框创建一个Close
命令?
IsCancel
属性(链接)。<Button IsCancel="True">Cancel</Button>
false
结果关闭对话框。如果您想要使用true
结果关闭,一种非常简单的方法是添加一个单击处理程序并编写两行代码。您的XAML是:<Button IsDefault="True" Click="acceptButton_Click">OK</Button>
而代码后台:
void acceptButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
APPCOMMAND_CLOSE
的文档给出了以下定义:
我认为WPF应用程序应该以相同的方式处理ApplicationCommand.Close,并且“窗口”将包括对话框(在Win32世界中通常是这样)。关闭窗口(而不是应用程序)。
因此,回答您的问题:不,ApplicationCommand.Close
并未保留用于关闭应用程序。它的目的是关闭窗口,包括对话框窗口。因此,没有必要创建单独的命令来关闭对话框。
许多应用程序只需在App.xaml中使用样式设置一个CommandBinding到Window类,并在处理程序中通过调用((Window)sender).Close()
来结束。这是一个简单而优雅的解决方案。
关闭应用程序与关闭对话框是不同的。
有一个内置命令可以解除对话框。在您创建的任何Window类的顶部都有一个大红色的“X”。当您点击该“X”时,会生成一个“DialogCancelCommand”,然后由Window类中的“OnDialogCancel”事件处理程序处理。但是,由于某些原因,只有Redmond内部知道,“DialogCancelCommand”是一个内部RoutedEvent。 我不能代表其他工程师,但我已经从反射代码中复制了“DialogCancelCommand”,以便我可以像内部命令执行相同操作一样关闭对话框。
/// <summary>
/// Cancels a dialog.
/// </summary>
public static readonly RoutedCommand DialogCancelCommand = new RoutedCommand("DialogCancel", typeof(CoreCommands));