C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WPFのContextMenuでのBindとGesture


(過去ログ 101 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■60594 / inTopicNo.1)  WPFのContextMenuでのBindとGesture
  
□投稿者/ HYGE (1回)-(2011/07/11(Mon) 18:47:54)

分類:[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でも同様の動作を実現できるような方法がありましたら、教えてください。

よろしくお願いいたします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -