2011-06-25 9 views
1

TreeView項目のクリックを明示的にキャプチャする方法はありますか?キャプチャTreeViewをクリックする項目

現在、私はテレビがユーザーのための一種のオプションメニューを表しています。通常は、テレビでSelectedItemChangedイベントを使用しますが、ユーザーがこのイベントを発生させない行で2回アイテムを再度クリックする可能性があります。私は、各ノードのアイテムを含むスタックパネルにイベントリスナーを置くことを考えましたが、ノード上で選択されたアイテムが変更される前にこのイベントが発生するという問題がありました。あなたがスタックパネルを押すと、あなたはイベントを受け取ることになりますが、関連するアイテムを手に入れることはできません。どのようにこの1つから抜け出すための任意のアイデアですか?

答えて

3

TreeViewの場合はMouseLeftButtonUpイベントを処理できます。

private void treeView1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    var selectedItem = treeView1.SelectedItem; 
} 

[EDIT]

あなたはMouseLeftButtonDownを扱うことができますが、SelectedItemは、その時点ではまだ変更されません。あなたができることはe.OriginalSourceにアクセスして、どの要素がクリックされたかを調べることです。以下の例を<TreeViewItem />のツリーでチェックしたので、要素はTextBlockでした。以下のコードを試してみると、あなたのシナリオに従ってタイプキャストを変更してください。

public MainPage() 
{ 
    InitializeComponent(); 
    treeView1.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(treeView1_MouseLeftButtonDown), true); 
} 

private void treeView1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var selectedElement = (TextBlock)e.OriginalSource; 
} 
+0

具体的には、ボタンを押したときの対応を希望したらどうなりますか?私はUXに不都合な遅れが欲しくない。 – themaestro

+0

@themaestro - MouseLeftButtonDownイベントをどのように扱うことができるかを示すことができますが、あなたと同じ問題が発生します。なぜなら、選択された項目は 'MouseLeftButtonDown'イベントの後、' MouseLeftButtonUp'の前に変更されるからです。 –

+0

@themaestro - 答えを更新しました。 –

関連する問題