2011-12-22 5 views
0

リストから選択した特別な項目をコンボボックスリストに再度表示する必要があります。このコードでは、アイテムが選択されたときにコンボリストが再び開くと仮定します。それはあなたがキーボードを使用する場合は動作しますが、私はマウスに問題があります。マウスで項目を選択すると、コンボボックスのリストが自動的にドロップダウンされます

 private void cbPredefinedReports_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      cbPredefinedReports.IsDropDownOpen = true; 
     } 

ユーザーがアイテムをクリックしたときに再びリストを削除するにはどうすればよいですか?

+0

これを解決しましたか? –

答えて

1

多分これが役立ちます。

<ComboBox Name="comboBox1" 
        DropDownClosed="comboBox1_DropDownClosed" 
        SelectionChanged="comboBox1_SelectionChanged" /> 

そして

private bool keepOpen = false; 
    private void comboBox1_DropDownClosed(object sender, EventArgs e) 
    { 
     new Thread(() => 
     { 
      comboBox1.Dispatcher.Invoke(new Action(() => 
      { 
       // do your IF logic here 
       if (keepOpen) 
       { 
        comboBox1.IsDropDownOpen = true; 
        keepOpen = false; 
       } 
      }), null); 
     }).Start(); 
    } 

    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     keepOpen = true; 
    } 
の後ろにコード

あなたはDropDownClosedイベントでコンボボックスを再度開くことができないので、あなたは、このためのスレッドを必要とする理由はあるが、あなたは別のスレッドでそれを行うことができます。ただし、WPFのcontrolfを別のスレッドから更新するには、Dispatcherを呼び出す必要があります。上記のコードは、あなたが尋ねたことだけを行います。

+0

WPFにはメッセージキューのようなものは何もありませんか? win32では、単純なPostMessageが必要です。スレッドを使用すると脆いようです。 –

+0

keepOpen = falseを無効にしました。すべてがOKと思われます。 –

+0

WPF UIの更新にスレッドを使用するのはまったく問題なく、ディスパッチャを介してスレッドを実行するだけで、コントロールを直接更新することはできません。これは実際にUIを更新するための好ましい方法です。 –

関連する問題