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>

テキスト ボックスの 1 つにキーボード フォーカスを置くと、TextBox は を処理できると宣言するApplicationCommands.Pasteので、ボタンとメニュー項目が有効になることを期待します。代わりに得られるのは、メニュー項目が有効になり、ボタンが有効にならないということです。TextBox(ボタンは'を「リッスン」しているようには見えませんCommandBinding)

ここで何が起こっているのでしょうか。これを回避する方法はありますか?


編集:私はこの質問を見つけました-> WPFルーティングコマンドの有効化はメニューでは機能しますが、ボタンでは機能しません<--しかし、これはこの場合には適していません。ボタンはキーボードでフォーカス可能であってはならず、フォーカス範囲として設定するとフォーカス可能になります。実際のソースはキーボード フォーカスで制御する必要があるため、ソースをバインドできません。

4

1 に答える 1

1

ボタンがツールバーに含まれていない限り、この方法でボタンの Command プロパティを使用することはできないようです。xaml で行うのと同じ結果が得られますが、同じコードを定期的に使用して、このコマンドをツールバーのボタンに割り当てます。

詳細については、「 WPF ボタンを使用したコマンドのコピーと貼り付け」を参照してください。

編集:

あなたが正しい。これは FocusScope に関係しており、次のように修正する方法が 2 つあります。

WPF ルーティング コマンドの有効化はメニューでは機能しますが、ボタンでは機能しません

FocusManager.IsFocusScopeボタンで設定できます:

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

別の方法として、ボタンのコマンド ターゲットを設定することもできますが、これは 1 つのテキスト ボックスに対してのみ機能します。

于 2013-10-01T22:29:37.457 に答える