トップ回答者
WPF ComboBoxItem.MouseLeftButtonDownが捕捉できない

質問
-
下のようなテストプログラムを実行していますが、イベントが捕捉されず困っています。
<Window x:Class="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">
<Grid>
<ComboBox Height="34" HorizontalAlignment="Left" Margin="78,59,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="132" IsEditable="True" />
</Grid>
</Window>
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Dim cbi0 As New ComboBoxItem
cbi0.Content = "01234"
Me.ComboBox1.Items.Add(cbi0)
Dim cbi1 As New ComboBoxItem
cbi1.Content = "aaabbbcc"
Me.ComboBox1.Items.Add(cbi1)
AddHandler cbi0.MouseLeftButtonDown, AddressOf cbi0_MouseLeftButtonDown
End Sub
Private Sub cbi0_MouseLeftButtonDown(sender As Object, e As System.Windows.Input.MouseButtonEventArgs)
'ここに飛んでこない
Stop
End Sub
End Class
オープンされたComboBoxのリストボックスの項目(ComboBoxItem形式)を左クリックすると、項目別に処理を分岐させるという仕様なのですが、どうすれば実現できるのでしょうか。教えて下さい。2016年6月15日 8:15
回答
-
以下が参考になると思います。
UIElement.MouseLeftButtonDown イベント
https://msdn.microsoft.com/ja-jp/library/system.windows.uielement.mouseleftbuttondown.aspxMouseLeftButtonDownの代わりに、PreviewMouseLeftButtonDownを使ってみて下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク huahi11112 2016年6月16日 11:19
2016年6月15日 8:42モデレータ -
ドロップダウンボックスのキーボード選択とマウス選択で処理を変える必要がある等の理由で、ほかのイベントでは処理できないと分かりました。結果としてはPreviewMouseLeftButtonDownイベントで動作しました。
速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。
- 回答としてマーク huahi11112 2016年6月16日 11:30
2016年6月16日 11:30
すべての返信
-
以下が参考になると思います。
UIElement.MouseLeftButtonDown イベント
https://msdn.microsoft.com/ja-jp/library/system.windows.uielement.mouseleftbuttondown.aspxMouseLeftButtonDownの代わりに、PreviewMouseLeftButtonDownを使ってみて下さい。
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク huahi11112 2016年6月16日 11:19
2016年6月15日 8:42モデレータ -
ComboBoxは上下キー(↑↓キー)でも項目を選択することができますが、その場合の対処は要らないのでしょうか?
また、ドロップダウンリスト中の項目のひとつにマウスオーバーしておいてEnterキーを押すと、項目の選択が確定されたことになります。
マウスクリックだけでなくその他の選択手段にも対応するのであれば、ComboBoxItem.Selectedイベント(ListBoxItem.Selectedイベント)を使うという方法もあると思います。
ちなみに一般論として、質問する際は開発環境やターゲットOSのバージョンなどを詳しく書くようにしましょう。
- 編集済み sygh 2016年6月15日 13:41
2016年6月15日 13:31 -
キーによる選択処理は、プログラムが完成しています。
ComboBoxItem.Selectedというイベントもあるのですね。使用を検討します。
今回の様な低レベルの質問程度で開発環境やターゲットOSを記載する必要は無いと考えております。御回答ありがとうございました。
- 編集済み huahi11112 2016年6月16日 11:19
2016年6月15日 22:47 -
ドロップダウンボックスのキーボード選択とマウス選択で処理を変える必要がある等の理由で、ほかのイベントでは処理できないと分かりました。結果としてはPreviewMouseLeftButtonDownイベントで動作しました。
速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。
- 回答としてマーク huahi11112 2016年6月16日 11:30
2016年6月16日 11:30 -
御回答ありがとうございました。SelectionChangedですと、ドロップダウンリストを↑↓キーで移動させるたびにイベントが発生するため使えないのです。返信遅れて済みませんでした。
- 編集済み huahi11112 2016年6月16日 11:42
2016年6月16日 11:41 -
技術系のフォーラムやメーリングリストで質問するときに、環境の情報をきちんと記すのは鉄則です。
フレームワークのバージョンやOSの違いによって細部の挙動が異なる、というようなことは、ソフトウェアの規模の大小にかかわらずよくあることです。また、古いバージョンでは使えなかった手法が、新しいバージョンでは使えるようになっている、ということもよくあります(その逆もまたしかり)。今回の問題の争点ではありませんが、具体的な環境情報の提示というのは基本動作にしたほうがよいと思います。
- 編集済み 星 睦美 2016年6月17日 5:06 soothing
2016年6月16日 13:14 -
速やかな御回答をいただき、ありがとうございました。でも、ハンドルできないMouseLeftButtonDownとは、何のためにあるのでしょうか。
WPFにはWindowsフォームには無かったルーティングイベントという概念があります。ネットを検索すれば解説されているページが多く見つかると思いますが、そのうちのいくつかをご紹介しておきます。
[WPF] WPF入門 ~ルーティングイベント~
http://blogs.wankuma.com/kzt/archive/2009/03/24/170149.aspxルーティングイベント
http://www.kanazawa-net.ne.jp/~pmansato/wpf/wpf_base.htm#event★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
2016年6月17日 0:45モデレータ -
フォーラム オペレーターの星 睦美です。
今回のスレッドと関連しない内容と判断しましたので一部の返信を削除させていただきました。フォーラムでのコミュニケーションの行き違いを避けるために、オペレーターからフォーラムへの質問の投稿に関するお願いをしています。フォーラムのご利用方法(質問の投稿)について を参考にご覧いただければ幸いです。
フォーラム オペレーター 星 睦美 - MSDN Community Support
- 編集済み 星 睦美 2016年6月17日 5:12 編集
2016年6月17日 4:57 -
星さんに付言させて頂きますが、回答者の方には以下のスレッドもぜひ確認して頂きたく思います。
フォーラムへの回答に関するガイドラインおよびフォーラム運営について(再掲)
「不適切な発言」フラグの濫用は、アカウント削除もあり得るようですのでご注意ください。
本フォーラムは、ユーザー(開発者)同士で情報交換を行うためのコミュニティです。初めて利用される方は、以下のアナウンスをご覧ください。 https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?
- 編集済み ひらぽんModerator 2016年6月17日 5:06
2016年6月17日 5:06モデレータ