|
分類:[C#]
2011/07/11(Mon) 18:49:04 編集(投稿者)
お世話になります。
現在WPFでアプリを開発しており、TextBoxのContextMenuに、KeyGesture(Ctrl+Enter)を設定したRoutedUICommandをバインドしています。 Commandは、TextBoxに入力がある場合にのみ実行可能としたく、以下のようにXAMLとコードビハインドを書きました。
■XAML <TextBox AcceptsReturn="True"> <TextBox.CommandBindings> <CommandBinding Command="{x:Static ViewModel.ExecuteCommand}" CanExecute="Execute_CanExecute" /> </TextBox.CommandBindings> <TextBox.ContextMenu> <ContextMenu> <MenuItem Command="{x:Static ViewModel.ExecuteCommand}" CommandParameter="{Binding Path=PlacementTarget.Text, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}"/> </ContextMenu> </TextBox.ContextMenu> </TextBox>
■コードビハインド private void Execute_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.Handled = true; e.ContinueRouting = false; if(!string.IsNullOrEmpty((e.Parameter as string))) e.CanExecute = true; else e.CanExecute = false; }
この状態で右クリックからContextMenuを表示し、Commandを実行すると、CommandParameterにはTextBox.Textプロパティが代入されています。 ただCtrl+EnterでCommandを実行すると、CommandParameterはnullになっています。 Ctrl+Enterでの実行の際は、ContextMenuが実体化しておらず、結果としてCommandParameterのバインドに失敗する事が原因と考えています。
CommandからKeyGestureを削除し、TextBox.InputBindings等を使えばCtrl+Enterでも同様の動作を実現可能だとは思うのですが、Commandの概念を考えるとショートカットもCommand側で管理したいです。 Commandの定義を変更せずに、Ctrl+Enterでも同様の動作を実現できるような方法がありましたら、教えてください。
よろしくお願いいたします。
|