2

考虑以下带有菜单和按钮的示例:

<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

这是怎么回事,有什么办法可以解决这个问题吗?


编辑:我确实发现了这个问题--> WPF 路由命令启用适用于菜单,但不适用于按钮<--但这不适合这种情况。该按钮不应该是键盘可聚焦的,并且将其设置为焦点范围使其可聚焦。我无法绑定源,因为实际源需要通过键盘焦点控制。

4

1 回答 1

1

除非它包含在工具栏中,否则您似乎不能以这种方式使用按钮的 Command 属性。我得到的结果与您对 xaml 所做的结果相同,但我经常使用相同的代码将此命令分配给工具栏中的按钮。

有关详细信息,请参阅使用 WPF 按钮复制和粘贴命令

编辑:

你是对的。它与 FocusScope 有关,有两种方法可以修复它,如下所示:

WPF 路由命令启用适用于菜单,但不适用于按钮

您可以FocusManager.IsFocusScope在按钮上设置:

<Button Command="ApplicationCommands.Paste" FocusManager.IsFocusScope="True">Paste</Button>

或者,您可以设置按钮的命令目标,但这仅适用于一个文本框。

于 2013-10-01T22:29:37.457 回答