WPF でコマンドを効果的に「エイリアス」する方法はありますか? 私の状況は次のとおりです。多数のカスタマイズされたキャンバスを持つグラフィカル エディターのコンテキストで ApplicationCommands.Delete を使用するアプリケーションを作成しました。これらのキャンバスにあるコントロールの一部は TextBox を使用していますが、ここに問題があります。TextBox は ApplicationCommands.Delete に応答せず、EditorCommands.Delete に応答します。すべての TextBox インスタンスでバインディングをサブクラス化または手動で設定せずに、 TextBox を ApplicationCommands.Delete にきれいに応答させる方法はありますか?
1 に答える
2
特定の質問に答えるために、2 つの別々のルーティングされたコマンドを同じコマンドとして処理する方法を知りません。しかし、ApplicationCommands.Delete
はルーティングされたコマンドであるため、ターゲットに配信された後、TextBox
コマンド バインディングがなく、泡立ち始めます。したがって、要件を満たす最も簡単な解決策は、必要な動作を実装するまで、場合によっては を含む間のApplicationCommands.Delete
どこかにコマンド バインディングをインストールすることです。TextBox
Window
Grid
これは、「正しい」コマンドを送信する親にハンドラーをインストールする例です。この場合、フォーカスされた要素は次のようになりTextBox
ます。
<Grid>
<Grid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Delete" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed"/>
</Grid.CommandBindings>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_Edit">
<MenuItem Header="_Delete" Command="ApplicationCommands.Delete"/>
</MenuItem>
</Menu>
<StackPanel>
<TextBox Text="Some text"/>
</StackPanel>
</DockPanel>
</Grid>
コードビハインドは次のとおりです。
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
EditingCommands.Delete.Execute(null, Keyboard.FocusedElement);
}
于 2011-02-24T04:32:00.873 に答える