2011-06-17 10 views
5

ListBoxにRIAサービスを設定すると、アイテムが自動的に選択されます。これにより、SelectionChangedイベントがトリガーされます。矢印キーを使用して選択範囲を上下に移動すると、イベントもトリガーされます。SilverlightのClickキーまたはEnterキーのときにのみListBoxアイテムを選択

私はこれが嫌いです。ユーザーがEnterを押すか、項目をクリックして選択する必要があります。これをどのように達成するのですか?

答えて

4

ListBoxのイベントは、MouseLeftButtonDownKeyDownのイベントを処理できます。 KeyDownイベントの場合は、EventArgsをチェックしてEnterキーが押されたかどうかを確認する必要があります(他のキーではなく)。

これらのイベントは、項目が選択されていない場合でも発生する可能性があります(たとえば、ユーザがListBoxの内部をクリックした場合、実際の項目を超過しない場合)ので、イベントハンドラ内で確認してください。

public void MyListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    ItemSelected(); 
} 

public void MyListBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if ((e.Key & Key.Enter) == Key.Enter) 
    { 
     ItemSelected(); 
    } 
} 

public void ItemSelected() 
{ 
    if (MyListBox.SelectedItem != null) 
    { 
     // Handle item selection here 
    } 
} 

これらは、私の頭の上からなので、あなたがそれらを正確に正しい動作させるために、わずかにこれらを微調整する必要がある場合があります

あなたのイベントハンドラは、次のようになります。うまくいけば、一般的なアイデアを参照してください。それを行うには


もう一つの方法は、この操作が完了したら、それを再接続し、(「-=」構文を使用)の項目でListBoxを取り込む際に、単純にSelectionChangedイベントハンドラを削除することです。

このようにすることをお勧めします(リストにデータが入力されたときにイベントが発生する心配があるため)。それは、上下の矢印キーを使用してユーザーがアイテムを選択するのを妨げることはありませんが、そうするための本当に良い理由がない限り、物事を不必要にしてしまいます(ユーザーは、働くべきである)。

関連する問題