2011-12-22 3 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, но вы можете сделать это в другом потоке. Однако, чтобы обновить controlf в WPF из другого потока, вам нужно вызвать Диспетчер. Вышеупомянутый код делает то, что вы просили.

+0

Имеет ли WPF ничего подобного очереди сообщений? В win32 простой PostMessage будет все, что вам нужно. Использование нитки кажется хрупким. –

+0

I disabled keepOpen = false; и все кажется ОК. –

+0

Не хрупкий вообще, прекрасно использовать потоки для обновления интерфейса WPF, вам просто нужно сделать это через Диспетчер, не может напрямую обновлять элементы управления. Это фактически предпочтительный способ обновления пользовательского интерфейса. –

Смежные вопросы