使用菜单和按钮考虑以下示例:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="Paste" Command="ApplicationCommands.Paste" />
</Menu>
<Button Command="ApplicationCommands.Paste">Paste</Button>
<TextBox>Content</TextBox>
<TextBox>Content2</TextBox>
</DockPanel>
</Window>
当我将键盘焦点放在其中一个文本框中时,TextBox声明它可以处理ApplicationCommands.Paste
,因此我希望按钮和菜单项能够自行启用。我得到的是菜单项自动启用,而按钮不启用。 (该按钮似乎没有“聆听”TextBox
'CommandBinding
)
这里发生了什么,有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
看起来您不能以这种方式使用按钮的Command属性,除非它包含在工具栏中。我得到的结果与xaml相同,但我会定期使用相同的代码将此命令分配给工具栏中的按钮。
有关详细信息,请参阅Copy and paste commands with WPF buttons。
修改强>
你是对的。它与FocusScope有关,有两种方法可以修复它,如下所示:WPF routed command enabling works with menu but not with a button
您可以在按钮上设置FocusManager.IsFocusScope
:
<Button Command="ApplicationCommands.Paste" FocusManager.IsFocusScope="True">Paste</Button>
或者,您可以设置按钮的命令目标,但这只适用于一个文本框。