WPF路由命令实现与菜单,但没有与一个按键作品(WPF routed command enablin

2019-09-17 08:46发布

在下面的例子中,当文本获得焦点,但不是按钮菜单中启用。 我曾经使用过的按钮和文本框尝试过,但行为是一样的。

<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>

Answer 1:

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

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附加属性,你会得到答案:

默认情况下,窗口类是重点范围,因为是菜单,文本菜单和工具栏类。 这是一个聚焦范围的元件具有IsFocusScope设置为TRUE。

非常混乱,当你不知道!



文章来源: WPF routed command enabling works with menu but not with a button
标签: wpf command