WPF路由命令启用菜单,但没有按钮

时间:2012-05-21 10:29:25

标签: wpf command

在以下示例中,当文本接收焦点但不接收按钮时,将启用菜单。我只用按钮和文本框试过它,但行为是一样的。

<Window x:Class="WpfPopup.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  Command="ApplicationCommands.Paste" />
    </Menu>
    <TextBox BorderBrush="Black" BorderThickness="2" Margin="25" TextWrapping="Wrap" x:Name="text1" Height="58" Width="203" >
        The MenuItem will not be enabled until
        this TextBox gets keyboard focus
    </TextBox>        
    <Button Content="Button" Height="23" Name="button1" Width="93" Command="ApplicationCommands.Paste" />
</DockPanel>

1 个答案:

答案 0 :(得分:2)

有两种简单的方法可以解决这个问题:

1)使用FocusManager.IsFocusScope:

    <Button Content="Button" Height="23" Name="button1" Width="93" Command="ApplicationCommands.Paste" FocusManager.IsFocusScope="True"/>

2)手动在按钮上设置CommandTarget:

<Button Content="Button" Height="23" Name="button1" Width="93" Command="ApplicationCommands.Paste" CommandTarget="{Binding ElementName=text1}" />

您可能想知道为什么这适用于菜单项?如果您阅读FocusManager.IsFocusScope附加财产的文档,您将得到答案:

  

默认情况下,Window类是一个焦点范围,Menu,   ContextMenu和ToolBar类。作为焦点范围的元素   将IsFocusScope设置为true。

当你不知道的时候非常困惑!