【发布时间】:2020-08-30 01:37:51
【问题描述】:
问题
为什么在按钮和菜单项中禁用 WPF ApplicationCommands.Close 命令?
代码
<Window x:Class="ApplicationCloseCommand.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:ApplicationCloseCommand.ViewModels"
mc:Ignorable="d"
Title="MainWindow" Height="169.493" Width="319.273">
<Window.DataContext>
<viewModels:MainWindowViewModel />
</Window.DataContext>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_Exit" Command="Close"/>
</MenuItem>
</Menu>
<Canvas>
<Button Content="Close" Command="Close" Height="23" VerticalAlignment="Top" Canvas.Left="142" Canvas.Top="31"/>
</Canvas>
</DockPanel>
</Window>
研究
Some sources 说要自己实现 ICommand 并在命令处理程序中执行 this.Close()。但是,我不明白为什么ApplicationCommands.Close 存在。
Some sources 表示需要实现CanExecute 方法以返回true。但同样,如果我必须自己做这件事,包括CloseCommandHandler(来自链接的示例),ApplicationCommands.Close 有什么好处?
Some sources 提及CommandTarget。这不起作用:
<MenuItem Header="_Exit" Command="Close" CommandTarget="{Binding ElementName=MyMainWindow}"/>
我是不是在 CommandTarget 上做错了?
【问题讨论】: