2

次の例では、ボタンではなくテキストがフォーカスを受け取ると、メニューが有効になります。ボタンとテキストボックスだけで試してみましたが、動作は同じです。

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

4

1 に答える 1

2

これを修正するには、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 に設定されています。

それがわからないときは非常に混乱します!

于 2012-05-21T10:42:26.917 に答える