2017-07-20 11 views
1

状況バインディング:私はWPFウィンドウ、およびクローズコマンド(Application.CloseCommand)におけるいくつかの編集コマンドを持ってWPF EditingCommandsコマンド

をし、この

ビューのようないくつかのバインディングがあります。

<Window.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.Close" 
         Executed="CloseCommandBinding_Executed"/> 
     <CommandBinding Command="EditingCommands.ToggleBold" 
         Executed="EditingCommand_Executed"></CommandBinding> 
</Window.CommandBindings> 
    <Window.InputBindings> 
     <KeyBinding Key="Esc" Command="ApplicationCommands.Close"></KeyBinding> 
    </Window.InputBindings> 
.. *Some panel and grid stuff and more things* .. 
<RichTextBox Name="RTBPopup"> 
     <RichTextBox.InputBindings> 
      <KeyBinding Key="Esc" Command="ApplicationCommands.Close"></KeyBinding> 
     </RichTextBox.InputBindings> 
</RichTextBox> 
.. *Some panel and grid stuff and more things* .. 
<ToggleButton x:Name="btnToggleBold" CommandManager.Executed="EditingCommand_Executed" Command="EditingCommands.ToggleBold" CommandTarget="{Binding ElementName=RTBPopup}">B</ToggleButton> 

今:

私は、コマンドが実行されますRTBPopup(リッチテキストボックス)でエスケープキーを押すと、デバッガがヒットした場合CloseCommandBinding_Executed方法

しかし

私は太字やプレスコントロール+ Bのためのトグルボタンをクリックすると、EditingCommand_Executedは、デバッガ(実行得ていない)によって打たれていない

に設定されたブレークポイント他に何私が試してみました:

<ToggleButton.CommandBindings> 
     <CommandBinding Command="EditingCommands.ToggleBold" Executed="EditingCommand_Executed"></CommandBinding> 
</ToggleButton.CommandBindings> 

答えて

1

PreviewExecutedイベントを処理します:

<CommandBinding Command="EditingCommands.ToggleBold" 
       PreviewExecuted="CommandBinding_PreviewExecuted" /> 

コマンドはRichTextBoxによって処理されますので、親にWindowまで吹き飛ばされることはありません。

ます。また、プログラムでイベントハンドラをフックするCommandManagerを使用しようとすることができませんでした:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     CommandManager.AddPreviewExecutedHandler(RTBPopup, new ExecutedRoutedEventHandler(OnExecuted)); 
    } 

    private void OnExecuted(object sender, ExecutedRoutedEventArgs e) 
    { 
     if(e.Command == EditingCommands.ToggleBold) 
     { 
      MessageBox.Show("fired!"); 
     } 
    } 
} 
+0

ませ運...コマンドが実行されているが、私の編集を参照してください –

+0

ヒットブレークポイントではありません。 CommandManager.AddPreviewExecutedHandlerメソッドを使用できます。 – mm8

+0

私はCommandExecutedの初期段階でPreviewExecutedを試してみました....まだ運がありません....問題のもう一つは、私はまだコマンドをボタンで管理できますが、実際にショートカットコマンド(Ctrl + B)、そのユーザーが確実に使用する –

関連する問題